$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";}
不改变i的值
例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 :(得分:1)
对它们进行反序列化,连接数组,然后对其进行序列化。
echo serialize(unserialize($var1) + unserialize($var2));
您必须使用+
而不是array_merge()
,因为如果键都是整数,后者会重新索引数组。由于您的所有密钥都以i:
开头,这意味着它们是数字索引。
有关s
的含义,请参阅Structure of a Serialized PHP string
答案 1 :(得分:0)
使用array_merge
将使用数字键重新索引数组。如果要避免这种情况,可以使用数组联合运算符(+
)代替:
$combined = unserialize($var2) + unserialize($var1);
这将为您提供正确的序列化输出。
请参阅https://eval.in/894864以了解其中的差异。