如何基于相同键的相同值组合2个数组

时间:2018-03-15 19:07:58

标签: php arrays merge

我想基于相同的键/值对合并/组合2个数组。

更清楚的是,我正在寻找的是一种MySQL中已知的连接函数。第一个数组应该由第二个数据“加入”,基于ID,即键/值对'名称'。

我该怎么做?

1。 ARRAY

 [0] => Array
        (
            [name] => first
            [logo] => url
            [cat] => abc
        )
[1] => Array
        (
            [name] => second
            [logo] => url
            [cat] => abc
        )

2。 ARRAY

 [0] => Array
        (
            [name] => first
            [menu] => true
            [key] => value
        )

NEW ARRAY(已取得成效):

[0] => Array
       (
           [name] => first
           [logo] => url
           [cat] => abc
           [menu] => true
           [key] => value
       )

如你所见,这是非常自我解释的。在这种情况下,'name'键就像一个ID(对于两个数组)。

2 个答案:

答案 0 :(得分:1)

如果您首先按名称重新索引第二个数组,则可以更容易地从中获取这些值。

$second = array_column($second, null, 'name');

(如果'名称'在阵列中是唯一的,那么这样做是可以的。我认为这是因为你说它" s"喜欢一个ID"。如果'名称不是唯一的,那么当您重新编制索引时,您将丢失一些行,因为数组键必须是唯一的。)

然后迭代你的第一个数组,并将第二个数组中的任何相应值合并到结果中。

foreach ($first as $key => $value) {
    if (isset($second[$value['name']])) {
        $result[$key] = array_merge($value, $second[$value['name']]);
    }
}

这就像SQL中的内部联接,其结果只包括两个表中存在值的行。如果您希望它更像左连接,那么如果在那里找不到匹配的名称值,则需要为第二个数组中的键合并一组空值。

foreach ($first as $key => $value) {
    if (isset($second[$value['name']])) {
        $result[$key] = array_merge($value, $second[$value['name']]);
    } else {
        $result[$key] = array_merge($value, ['menu' => null, 'key' => null]);
    }
}

Working example at 3v4l.org.

答案 1 :(得分:0)

试试这个

$mergedArray = array_merge_recursive ($firstArray,$secondArray);

$newArray = [];
foreach( $mergedArray as $subArr ) {
    $newArray = array_merge($subArr,$newArray);
}