【问题标题】:Merge two associative arrays and group by first level key合并两个关联数组并按一级键分组
【发布时间】:2015-09-23 05:18:51
【问题描述】:

$array 1:-

Array
(
    [Test Stock] => Array
        (
            [intStockCount] => 10
        )

    [CARTON 50 X 50 X 50] => Array
        (
            [intStockCount] => 10
        )
)

$array2:-

Array
(
    [Test Stock] => Array
        (
            [intInvoiceCount] => 20
        )

    [CARTON 50 X 50 X 50] => Array
        (
            [intInvoiceCount] => 30
        )
)

我需要一个不使用循环将所有元素组合在一起的新数组

Array
(
    [Test Stock] => Array
        (
            [intStockCount] => 10
            [intInvoiceCount] => 20
        )

    [CARTON 50 X 50 X 50] => Array
        (
            [intStockCount] => 10
            [intInvoiceCount] => 30
        )
)

【问题讨论】:

标签: php arrays recursion merge


【解决方案1】:
  $array1 = array(
    'Test Stock' => array(
        'intStockCount' => 10,
    ),
    'CARTON 50 X 50 X 50' => array(
        'intStockCount' => 10
    )
    );
    $array2 = array(
    'Test Stock' => array(
        'intStockCount' => 10,
    ),
    'CARTON 50 X 50 X 50' => array(
        'intStockCount' => 10
    )
    );
    $result = array_merge_recursive($array1, $array1);

    var_dump($result);

你必须改变你的数组结构。

对于普通数组合并:

$result = array_merge($array1, $array2);

http://php.net/manual/en/function.array-merge.php

【讨论】:

  • 这在这种情况下不起作用,因为相同的字符串键。该键的后一个值将覆盖前一个值。
  • @DavidDomain 你是对的,因此你需要 array_merge_recursive 函数。我编辑了我的答案。并且还需要正确地改变他的数组结构。
  • 这是一个选择。我删除了反对票,但我仍然更喜欢array_merge_recursive。我们必须考虑到 OP 不想改变数组结构。
【解决方案2】:

您可以使用array_merge_recursive 来完成这项工作。

array_merge_recursive

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

如果输入数组有相同的字符串键,那么这些键的值被合并到一个数组中,这是递归完成的,所以如果其中一个值是一个数组本身,函数会将它与另一个数组中的相应条目也是如此。但是,如果数组具有相同的数字键,则后面的值不会覆盖原始值,而是会被追加。

只要做:

<?php
$array1 = array(
    "Test Stock" => array(
        "intStockCount" => 10
    ),
    "CARTON 50 X 50 X 50" =>  array(
        "intStockCount" => 10
    )
);

$array2 = array(
    "Test Stock" => array(
        "intInvoiceCount" => 20
    ),
    "CARTON 50 X 50 X 50" =>  array(
        "intInvoiceCount" => 30
    )
);

$final = array_merge_recursive($array1,$array2);
echo '<pre>';
print_r($final);
echo '</pre>';

/* OUTPUT
Array
(
    [Test Stock] => Array
        (
            [intStockCount] => 10
            [intInvoiceCount] => 20
        )

    [CARTON 50 X 50 X 50] => Array
        (
            [intStockCount] => 10
            [intInvoiceCount] => 30
        )

)
*/

这里要注意的重要一点是,您在两个arrays 中使用了相同的字符串key。正如 PHP 文档所述

...这些键的值被合并到一个数组中

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2012-02-25
    • 2012-10-21
    • 2019-08-11
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多