Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Не работает функция обработки массива


Автор: InfMag 24.12.2007, 13:34
Написал пару функций для сборки массива в строку и обратно:
Код

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|'));

Автор: Insight 24.12.2007, 13:43
в 24 и 25ой строчке как-то страннова-то вы создаете массив. Попробуйте заменить на -

Код

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

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

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;
    }

Автор: InfMag 24.12.2007, 14:11
Insight, 
krundetz, 
thanks +1  smile 

Автор: skyboy 24.12.2007, 14:28
я бы не усложнял жизнь, а обошелся бы http://php.net/array_walk_recursive и http://php.net/implode
Впрочем, дело вкуса: изобретать велосипед или нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)