сериализация — объединение двух данных сериализации в переполнение стека

$var1='a:1:{i:123;s:3:"123";}';

$var2='a:1:{i:56;s:2:"56";}';

output a:2:{i:56;s:2:"56";i:123;s:3:"123";}

Без изменения значения я

Пример2;

$var1='a:2:{i:56;s:2:"56";i:123;s:3:"123";}';

$var2='a:1:{i:154;s:3:"154";}';

ouput a:3:{i:56;s:2:"56";i:123;s:3:"123";i:154;s:3:"154";}

я использую

$a=unserialize($var1);
$a2=unserialize($var2);
$result = array_merge($a, $a2);
$serialized_array=serialize($result);
print_r($serialized_array);

но все значения менялись

и что делает s обозначает в вышеупомянутых последовательностях

0

Решение

Отмените их сериализацию, объедините массивы, затем сериализуйте их.

echo serialize(unserialize($var1) + unserialize($var2));

Вы должны использовать + вместо array_merge() потому что последний переиндексирует массив, если ключи все целые. Поскольку все ваши ключи начинаются с i:, это означает, что они числовые индексы.

DEMO

Для смысла s, увидеть Структура сериализованной строки PHP

1

Другие решения

С помощью array_merge будет переиндексировать массивы с помощью цифровых клавиш. Если вы хотите избежать этого, вы можете использовать оператор объединения массивов (+) вместо:

$combined = unserialize($var2) + unserialize($var1);

Это даст вам правильный сериализованный вывод.

Увидеть https://eval.in/894864 продемонстрировать разницу.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector