【问题标题】:PHP Merge array with same keys and one same valuePHP合并具有相同键和相同值的数组
【发布时间】:2014-03-12 19:27:49
【问题描述】:

我需要合并一个 PHP 数组,这个数组有 2 个名为“targetXX”的数组,我可以有 2 个或更多。每个目标都有相同的键,对于每个键,我有一个包含 2 个值 a 和 b 的数组,两个目标中的 a 始终相同,但我需要像这样合并两个 B 值:

Array
(
    [0] => Array
        (
            [target] => hitcount(stats.asdf1.requests, "1min")
            [datapoints] => Array
                (
                    [0] => Array
                        (
                            [0] => 1200
                            [1] => 1392282200
                        )

                    [1] => Array
                        (
                            [0] => 1400
                            [1] => 1392282260
                        )

                    [2] => Array
                        (
                            [0] => 600
                            [1] => 1392282320
                        )

                    [3] => Array
                        (
                            [0] => 200
                            [1] => 1392282380
                        )

                    [4] => Array
                        (
                            [0] => 400
                            [1] => 1392282440
                        )

                    [5] => Array
                        (
                            [0] => 600
                            [1] => 1392282500
                        )
                )
        )
    [1] => Array
        (
            [target] => hitcount(stats.asdf.requests, "1min")
            [datapoints] => Array
                (
                    [0] => Array
                        (
                            [0] => 4321
                            [1] => 1392282200
                        )

                    [1] => Array
                        (
                            [0] => 76567
                            [1] => 1392282260
                        )

                    [2] => Array
                        (
                            [0] => 5556
                            [1] => 1392282320
                        )

                    [3] => Array
                        (
                            [0] => 7675
                            [1] => 1392282380
                        )

                    [4] => Array
                        (
                            [0] => 2344
                            [1] => 1392282440
                        )

                    [5] => Array
                        (
                            [0] => 0999
                            [1] => 1392282500
                        )
                )
        )

结果:

    Array
(
    [0] => Array
        (
            [target] => hitcount(stats.asdf1.requests, "1min")
            [datapoints] => Array
                (
                    [0] => Array
                        (
                            [0] => 1200
                            [1] => 1392282200
                            [2] => 4321
                        )

                    [1] => Array
                        (
                            [0] => 1400
                            [1] => 1392282260
                            [2] => 76567
                        )

                    [2] => Array
                        (
                            [0] => 600
                            [1] => 1392282320
                            [2] => 5556
                        )

                    [3] => Array
                        (
                            [0] => 200
                            [1] => 1392282380
                            [2] => 7675
                        )

                    [4] => Array
                        (
                            [0] => 400
                            [1] => 1392282440
                            [2] => 2344
                        )

                    [5] => Array
                        (
                            [0] => 600
                            [1] => 1392282500
                            [2] => 0999
                        )
                )
        )

【问题讨论】:

  • 我尝试将每个目标放在一个新数组上并将这些数组与 array_merge_recursive 合并,但我不知道如何解决它,因为我可以有 2 个或更多目标 :(
  • 您可以反复调用array_merge_recursive,直到您检查完所有子阵列。

标签: php arrays


【解决方案1】:

使用array_merge() 来实现:

$newArray = array();

foreach ($myArray['target2'] as $key => $innerArr1) {
    $newArray['target'][$key] = array_merge(
        $myArray['target1'][$key],  /* 0th and 1st index */
        array($innerArr1[1])        /* 2nd index         */
    );
}

print_r($newArray);

输出:

Array
(
    [target] => Array
        (
            [0] => Array
                (
                    [0] => 333333
                    [1] => 13
                    [2] => 99
                )

            [1] => Array
                (
                    [0] => 444444
                    [1] => 15
                    [2] => 98
                )

            [2] => Array
                (
                    [0] => 555555
                    [1] => 17
                    [2] => 97
                )

        )

)

Demo

【讨论】:

  • 你好@amal-murali,最后数组结构不同了,我尝试在其中实现你的解决方案,但它不起作用,你能帮我解决这个问题吗?非常感谢!!
【解决方案2】:

内置的function array_merge 可以为您完成工作。实际上,您需要合并每个子数组,因为 array_merge_recursive 函数不处理索引。

$newArray = array();
foreach ($myArray['target2'] as $key => $arr) {
    $newArray['target'][$key] = array_merge($myArray['target1'][$key], $arr[1]);
}

将一个或多个数组的元素合并在一起,以便将一个数组的值附加到前一个数组的末尾。它返回结果数组。

如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。

如果您有超过 2 个要合并的键,您可以在算法上循环多次。

【讨论】:

  • 这是不正确的,因为array_merge()要求它的参数是数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多