在php中结合两个序列化数据

时间:2017-11-07 17:41:34

标签: php serialization deserialization

$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代表上述字符串中的内容

2 个答案:

答案 0 :(得分:1)

对它们进行反序列化,连接数组,然后对其进行序列化。

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

您必须使用+而不是array_merge(),因为如果键都是整数,后者会重新索引数组。由于您的所有密钥都以i:开头,这意味着它们是数字索引。

DEMO

有关s的含义,请参阅Structure of a Serialized PHP string

答案 1 :(得分:0)

使用array_merge将使用数字键重新索引数组。如果要避免这种情况,可以使用数组联合运算符(+)代替:

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

这将为您提供正确的序列化输出。

请参阅https://eval.in/894864以了解其中的差异。