我需要将数组与父数组的值合并。
$testArr=unserialize('a:6:{s:5:"queue";a:2:{i:6;s:1:"5";i:5;s:1:"2";}s:3:"sum";a:2:{i:6;s:3:"765";i:5;s:3:"2.1";}s:7:"sumAccD";a:2:{i:6;s:3:"543";i:5;s:3:"3.1";}s:7:"sumAccC";a:2:{i:6;s:2:"54";i:5;s:3:"3.3";}s:7:"comment";a:2:{i:6;s:12:"test comment";i:5;s:6:"111222";}s:3:"yt0";s:0:"";}');
$ret = array();
foreach ($testArr as $pkey => $pval) {
if (is_array($pval)) {
foreach ($pval as $pvkey => $pvval) {
$ret[$pvkey] = array($pkey => $pvval);
}
}
}
echo '<pre>', print_r($ret), '</pre>';
在这种情况下,它打印出来
Array
(
[6] => Array
(
[comment] => test comment
)
[5] => Array
(
[comment] => 111222
)
)
1
不幸的是,它只打印出评论。我需要添加其他行:queue,sum,sumAccD,sumAccC。数组必须如下所示:
Array
(
[6] => Array
(
[queue] => 5
[sum] => ''
....
[comment] => test comment
)
[5] => Array
(
[queue] => 2
[sum] => 2.1
....
[comment] => 111222
)
)
1
请帮助合并它们。 感谢。
答案 0 :(得分:0)
看看这一行:
$ret[$pvkey] = array($pkey => $pvval);
您每次都要将密钥分配给新阵列,覆盖之前的内容。 在您的情况下,'comment'是处理的最后一个键,因此它将成为最终数组中唯一的键。
除此之外,您可以在内部之外仅定义一个新数组,如下所示:
$ret[$pvkey] = array();
然后像往常一样在内部for循环中将值分配给该数组(因此不再在那里创建数组!)
答案 1 :(得分:0)
通过替换
解决了问题$ret[$pvkey] = array($pkey => $pvval);
与
$ret[$pvkey][$pkey] = $pvval;