-1

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

$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

请帮助合并它们。谢谢。

4

2 回答 2

0

看看这一行:

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

您每次都将密钥分配给一个新数组,覆盖以前存在的内容。在您的情况下,'comment' 是最后一个被处理的键,所以这将是最终数组中的唯一键。

取而代之的是,您可以只在内部 for 之外定义一个新数组,如下所示:

$ret[$pvkey] = array();

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

于 2013-01-12T19:17:03.090 回答
0

问题通过更换解决

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

$ret[$pvkey][$pkey] = $pvval;
于 2013-01-13T07:53:15.087 回答