$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
обозначает в вышеупомянутых последовательностях
Отмените их сериализацию, объедините массивы, затем сериализуйте их.
echo serialize(unserialize($var1) + unserialize($var2));
Вы должны использовать +
вместо array_merge()
потому что последний переиндексирует массив, если ключи все целые. Поскольку все ваши ключи начинаются с i:
, это означает, что они числовые индексы.
Для смысла s
, увидеть Структура сериализованной строки PHP
С помощью array_merge
будет переиндексировать массивы с помощью цифровых клавиш. Если вы хотите избежать этого, вы можете использовать оператор объединения массивов (+
) вместо:
$combined = unserialize($var2) + unserialize($var1);
Это даст вам правильный сериализованный вывод.
Увидеть https://eval.in/894864 продемонстрировать разницу.