【问题标题】:How to merge two associative arrays in PHP? [closed]如何在 PHP 中合并两个关联数组? [关闭]
【发布时间】:2015-10-14 12:29:51
【问题描述】:

我有两个数组,我想将它们合并到一个数组中。我已经添加了两个数组以及所需的输出。

数组1:

Array
(
    [0] => Array
        (
            [0] => b561d2e627efd2
            [1] => d561d2e627f0cc
            [2] => f561d2e627f17a
            [3] => g561d2e627f1d1
        )

    [1] => Array
        (
            [0] => b561d2e627f632
            [1] => d561d2e627f71f
            [2] => f561d2e627f7d1
            [3] => g561d2e627f823
        )
)

数组2:

Array
(
    [0] => Array
        (
            [0] => c561d2e627f378
            [1] => e561d2e627f425
            [2] => b561d2e627efd2
        )

    [1] => Array
        (
            [0] => c561d2e627f9ee
            [1] => e561d2e627fa78
            [2] => b561d2e627f632
        )
)

所需输出:

Array
(
    [0] => Array
        (
            [0] => b561d2e627efd2
            [1] => d561d2e627f0cc
            [2] => f561d2e627f17a
            [3] => g561d2e627f1d1
            [4] => c561d2e627f378
            [5] => e561d2e627f425
            [6] => b561d2e627efd2
        )

    [1] => Array
        (
            [0] => b561d2e627f632
            [1] => d561d2e627f71f
            [2] => f561d2e627f7d1
            [3] => g561d2e627f823
            [4] => c561d2e627f9ee
            [5] => e561d2e627fa78
            [6] => b561d2e627f632
        )
)

【问题讨论】:

标签: php


【解决方案1】:

简单。遍历您的第一个数组,获取当前键,使用该键获取第二个数组的块,使用 array_merge 合并它们,然后将它们推送到新数组。执行以下操作:

$arr1 = array(
    array("one", "two", "three"),
    array("ten", "eleven", "twelve")
);
$arr2 = array(
    array("four", "five", "six"),
    array("thirteen", "fourteen", "fifteen")
);

foreach ($arr1 as $k => $arr1_chunk) {
    $arr2_chunk = $arr2[$k];
    $final[] = array_merge($arr1_chunk, $arr2_chunk);
}
var_dump($final);

结果:

array (size=2)
  0 => 
    array (size=6)
      0 => string 'one' (length=3)
      1 => string 'two' (length=3)
      2 => string 'three' (length=5)
      3 => string 'four' (length=4)
      4 => string 'five' (length=4)
      5 => string 'six' (length=3)
  1 => 
    array (size=6)
      0 => string 'ten' (length=3)
      1 => string 'eleven' (length=6)
      2 => string 'twelve' (length=6)
      3 => string 'thirteen' (length=8)
      4 => string 'fourteen' (length=8)
      5 => string 'fifteen' (length=7)

【讨论】:

    【解决方案2】:

    您不建议处理重复值,并且两个数组似乎具有相同数量的第一级元素,因此只需将数组 2 的内容推入数组 1 就可以完成这项工作,只需一个简单的嵌套循环:

    foreach($array1 as $k=>$v){
        foreach($array2[$k] as $val){
            $array1[$k][] = $val;
        }
    }
    

    【讨论】:

    • 为什么它被否决了两次?
    • @CodeGodie 大概它被接受了,因为它按照 OP 的要求做了 - $array1 将匹配预期的输出。我特别提到它是一种天真的方法,它不处理重复或不同长度的数组,但 OP 从未建议这是第一要求。
    • 你知道吗。你说的对。我认为foreach 中的$array1 变量是一个不同的变量。我将删除我的评论并立即投票。感谢您的反馈。
    【解决方案3】:

    您可以使用array_merge 来“展平”这些数组。

    假设第一个数组被称为 $array1,第二个数组被称为 array2,这就是你在上面引用的示例中的工作方式

    $new_array = array_merge($array1[0], $array1[1]);
    $new_array2 = array_merge($array2[0], $array2[1]);
    print_r($new_array);
    print_r($new_array2);
    

    【讨论】:

    • 这不起作用,因为合并需要与第二个数组一起发生,即array1[0] 与array2[0]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2011-04-15
    • 2016-07-17
    • 2012-02-25
    • 2012-10-21
    相关资源
    最近更新 更多