Lafafm
@Lafafm
Development lead, Full stack generalist

Почему функция serialize одинаковых значений выдаёт разный ответ?

Проблема вот в чем.
Если делаю так (напрямую задаю массив), то он сериализуется нормально:
serialize(array("1"=>"1", "2"=>"3"));
a:2:{i:1;s:1:"1";i:2;s:1:"3";} - ответ

Если же значения массива в переменной и сериализуется сама переменная, выходит разный ответ:
$str = '"1"=>"1", "2"=>"3"';
serialize(array($str));
a:1:{i:0;s:18:""1"=>"1", "2"=>"3"";} - ответ


Если кто-то объяснит почему так, и как же эту проблему решить, буду благодарен.

UPD1 - После простой попытки создания массива, я понял, что он просто не создаётся..
Вопрос теперь в том, как создать массив с переменной, парсить строку?
  • Вопрос задан
  • 2740 просмотров
Решения вопроса 1
zenaku
@zenaku
serialize(array("1"=>"1", "2"=>"3"));

Тут массив из 2-ух элементов
a:2:{i:1;s:1:"1";i:2;s:1:"3";}
тут мы видим а:2 - массив состоящий из двух элементов. При этом внутри видим i:1;s:1:''1".
Это значит ключ типа integer 1 и значение типа string с 1 символом "1". Второй элемент аналогично.

$str = '"1"=>"1", "2"=>"3"';
serialize(array($str));

Тут же ты создал строку '"1"=>"1", "2"=>"3"', которая преобразуется в массив с одним элементом и ключом 0. Из сериализации ту увидишь:
a:1:{i:0;s:18:""1"=>"1", "2"=>"3"";}
Массив с 1-им элементом. Ключ типа integer и равен 0, а значение - string из 18 символов и равно '"1"=>"1", "2"=>"3"'

Для разбивки той строки на подстроки есть функция
И это будет выглядеть примерно так:
$str = '1, 3';
serialize( explode(',' , $str) );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iDevArtem
@iDevArtem
в общем, так нельзя:
$str = '"1"=>"1", "2"=>"3"';
serialize(array($str));

правильно:
$str = array("1"=>"1", "2"=>"3");
serialize($str);


массив состоит из 'ключ' => 'значение', а не строка " 'ключ' => 'значение' "
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы