Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает функция обработки массива, Написал функцию, вроде все правильно... 
V
    Опции темы
InfMag
Дата 24.12.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Написал пару функций для сборки массива в строку и обратно:
Код

function arr_to_str($arr)
    {
        if (is_array($arr))
        {
            $cookie_string = '';
            foreach($arr as $ind => $val)
            {
                $ind = str_replace('|', '|', $ind);
                $val = str_replace('|', '|', $val);
                $ind = str_replace('=', '=', $ind);
                $val = str_replace('=', '=', $val);
                $cookie_string .= $ind.'='.$val.'|';
            }
        }
        return $cookie_string;
    }
    
    function str_to_arr($cookie_string)
    {
        $arrays = explode('|', $cookie_string);
        for ($i=0; $i<sizeof($arrays); $i++)
        {
            $values = explode('=', $arrays[$i]);
            if (isset($array)) $array .= Array($values[0] => $values[1]);
                else $array = Array($values[0] => $values[1]);
        }
        return $array;
    }

Массив превратить в троку - запросто:
Код

echo arr_to_str(Array('ind1'=>'val1','ind2'=>'val2'));

Выдает - ind1=val1|ind2=val2|
А вот обратная функция имеет нулевой эффект...
Код

echo arr_to_str(str_to_arr('ind1=val1|ind2=val2|'));

PM   Вверх
Insight
Дата 24.12.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 5.2.2006

Репутация: 1
Всего: 1



в 24 и 25ой строчке как-то страннова-то вы создаете массив. Попробуйте заменить на -

Код

            if (isset($array)) $array[] = Array($values[0] => $values[1]);
                else $array[] = Array($values[0] => $values[1]);

PM MAIL   Вверх
krundetz
Дата 24.12.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Первая функция тоже не совсем верна. У вас инициализируется строка только в случае если пришо массив если же придет что то другое то скорее всего функция вылетит с ошибкой.  На мой взгляд такой вариант более верен.
Код

function arr_to_str($arr)
    {
        $cookie_string = '';
        if (is_array($arr))
        {
            foreach($arr as $ind => $val)
            {
                $ind = str_replace('|', '|', $ind);
                $val = str_replace('|', '|', $val);
                $ind = str_replace('=', '=', $ind);
                $val = str_replace('=', '=', $val);
                $cookie_string .= $ind.'='.$val.'|';
            }
        }
        return $cookie_string;
    }

Вторая по логике правильна но реализация неверна
попробуйте вот этот вариант
Код

function str_to_arr($cookie_string)
    {
        $array = array();
        $arrays = explode('|', $cookie_string);
        for ($i=0; $i<sizeof($arrays); $i++)
        {
            $values = explode('=', $arrays[$i]);
            if (isset($array)) 
                 $array[$values[0]] = $values[1];
        }
        return $array;
    }



--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
InfMag
  Дата 24.12.2007, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Insight
krundetz
thanks +1  smile 
PM   Вверх
skyboy
Дата 24.12.2007, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



я бы не усложнял жизнь, а обошелся бы array_walk_recursive и implode
Впрочем, дело вкуса: изобретать велосипед или нет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.