Невозможно десериализовать элемент массива в переменную массива - PullRequest
0 голосов
/ 23 декабря 2010
I am passing this array from one function to another


    function componentBuildRoute(&$query)
    {
        $segments = array();
        $segments[] = $var...
        ...
        $str = serialize($segments);
        $str = urlencode($str);
        $segments[] = $str;

//if I do a pre print_r for $segments[];
//THIS PRINTS
//**SERIALIZED:
//Array
//(
//    [page] => mostrar_clasificado
//    [catid] => 3
//    [category_alias] => nuevo
//    [adid] => 3
//    [ad_alias] => 3-way-conector-de-tubos
//    [0] => a%3A5%3A%7Bs%3A4%3A%22page%22%3Bs%3A19%3A%22mostrar_clasificado%22%3Bs%3A5%3A%22catid%22%3Bs%3A1%3A%223%22%3Bs%3A14%3A%22category_alias%22%3Bs%3A5%3A%22nuevo%22%3Bs%3A4%3A%22adid%22%3Bs%3A1%3A%223%22%3Bs%3A8%3A%22ad_alias%22%3Bs%3A23%3A%223-way-conector-de-tubos%22%3B%7D
//)**

    return $segments;
    }
function componentParseRoute( $segments )  
    {
//if I do a pre print_r() for the passed array of $segments[]; 
//*THIS PRINTS
//**PASSED SEGMENTS:
//Array
//(
//    [0] => mostrar_clasificado
//    [1] => 3
//    [2] => nuevo
//    [3] => 3
//    [4] => 3:way-conector-de-tubos
//    [5] => a:5-{s-4-"page";s-19-"mostrar_clasificado";s-5-"catid";s-1-"3";s-14-"category_alias";s-5-"nuevo";s-4-"adid";s-1-"3";s-8-"ad_alias";s-23-"3-way-conector-de-tubos";}
//)**
        $str = end($segments);
        echo "LAST ELEMENT OF PASSED ARRAY STR:
        ".**$str**; 

//THIS PRINTS:
//LAST ELEMENT OF PASSED ARRAY STR:
a:5-{s-4-"page";s-19-"mostrar_clasificado";s-5-"catid";s-1-"3";s-14-"category_alias";s-5-"nuevo";s-4-"adid";s-1-"3";s-8-"ad_alias";s-23-"3-way-conector-de-tubos";}
//**DECODED ALREADY HOW COME?**
        $testing = array();
        **$testing = unserialize($str);**
        echo "UNSERIALIZED TESTING:";
    print_r($testing);
//THIS PRINTS:
//UNSERIALIZED SEGMENTS: 
//**NO ARRAY!!! (BLANK SPACE AFTER TEXT) NO UNSERIALIZED ARRAY**
//I'LL PRINT THE ARRAY AGAIN TO VERIFY I GOT WHAT I THOUGHT I GOT

echo "SEGMENTS 2:";
    print_r($segments);

//THIS PRINTS:
//SEGMENTS 2:
//
//Array
//(
//    [0] => mostrar_clasificado
//    [1] => 3
//    [2] => nuevo
//    [3] => 3
//    [4] => 3:way-conector-de-tubos
//    [5] => a:5-{s-4-"page";s-19-"mostrar_clasificado";s-5-"catid";s-1-"3";s-14-"category_alias";s-5-"nuevo";s-4-"adid";s-1-"3";s-8-"ad_alias";s-23-"3-way-conector-de-tubos";}
//)
//I AM UNABLE TO **UNSERIALIZED** THE LAST ELEMENT OF THE ARRAY
//any pointers?
//also, as I mentioned before, 
//I don't understand why the urlencoded 
//and serialized 
//element of the array, gets passed to 
//the second function already urldecoded

Ответы [ 2 ]

0 голосов
/ 23 декабря 2010

Мне не удалось десериализовать строку, которую я передавал второй функции через сегменты массива.Я обнаружил, что многие публикации через Интернет указывают на то, что при передаче сериализованной строки базовая структура передаваемых данных могла измениться даже при том, что она выглядит нетронутой.Я не знаю технических деталей.Но когда я сделал var_dump (sunserialized_array), я получил false.

Для некоторой информации, которую я нашел, я публикую эти ссылки:http://www.php.net/manual/en/function.unserialize.php#70884
http://www.php.net/manual/en/function.unserialize.php#40757

Моя первоначальная цель состояла в том, чтобы передать сериализованную версию массива в виде строкового элемента того же массива, чтобы он не был сериализован и использовался во второй функции.Поэтому я прибег к созданию строки с собранными ключами и переменными массива в вопросах (массив $ сегментов в моем коде вопроса), и я добавил $ string_to_be_parsed в передаваемый массив.Я извлек $ string_to_parsed = end ($ сегменты) во второй функции и ... ЗДЕСЬ ХОРОШАЯ ЧАСТЬ используйте эту функцию для воссоздания массива parse_str ($ str, $ сегментов); Я нашел это решение: Почему unserialize в PHP продолжает возвращать false?

Итак, я не смог не сериализовать то, что хотел, но нашел альтернативный способ достижения своей цели.

0 голосов
/ 23 декабря 2010

Эй, ДОД, этот код работает правильно!



function componentBuildRoute(&$query)
{
        $segments = array();
        $str = serialize(
            array(
                "page"=>"mostrar_clasificado",
                "catid"=>"3",
                "category_alias"=>"nuevo",
                "adid"=>"3",
                "ad_alias"=>"3-way-conector-de-tubos"
                )
            );
        $str = urlencode($str);
        $segments[] = $str;
        return $segments;
}
function componentParseRoute( $segments )  
{
        $str = end($segments);
        $testing = array();
        $str = urldecode($str);
        $testing = unserialize($str);
   return $testing;
}

$query = '';

$val = componentBuildRoute(&$query);
print_r($val);
echo "\n";
$val2 = componentParseRoute($val);
print_r($val2);



...