php数组与父数组的值合并

时间:2013-01-12 19:09:50

标签: php arrays merge

我需要将数组与父数组的值合并。

$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

请帮助合并它们。 感谢。

2 个答案:

答案 0 :(得分:0)

看看这一行:

$ret[$pvkey] = array($pkey => $pvval);

您每次都要将密钥分配给新阵列,覆盖之前的内容。 在您的情况下,'comment'是处理的最后一个键,因此它将成为最终数组中唯一的键。

除此之外,您可以在内部之外仅定义一个新数组,如下所示:

$ret[$pvkey] = array();

然后像往常一样在内部for循环中将值分配给该数组(因此不再在那里创建数组!)

答案 1 :(得分:0)

通过替换

解决了问题
$ret[$pvkey] = array($pkey => $pvval);

$ret[$pvkey][$pkey] = $pvval;