【问题标题】:php array merge with value of parent arrayphp数组与父数组的值合并
【发布时间】:2013-01-12 19:09:49
【问题描述】:

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

$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

请帮助合并它们。 谢谢。

【问题讨论】:

    标签: php arrays merge


    【解决方案1】:

    看看这一行:

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

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

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

    $ret[$pvkey] = array();
    

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

    【讨论】:

    • 当我尝试将它们与以下内容合并时: $ret[$pvkey] .= array($pkey => $pvval);它打印 [6] => ArrayArrayArrayArrayArray [5] => ArrayArrayArrayArrayArray
    • 那是因为. 是字符串连接运算符,因此将两个操作数都转换为字符串。转换为字符串的数组在 PHP 中是“数组”。不过,您可以将数组与 += 合并。
    • 问题通过替换 $ret[$pvkey] = array($pkey => $pvval); $ret[$pvkey][$pkey] = $pvval;
    【解决方案2】:

    问题通过替换解决

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2016-05-14
      • 2015-06-02
      相关资源
      最近更新 更多