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

Php 如何基于相同键的相同值组合2个数组,php,arrays,merge,Php,Arrays,Merge,我想基于相同的键/值对合并/组合2个数组 更清楚地说,我搜索的是MySQL中已知的连接函数。第一个数组应该由第二个数组根据ID“联接”,ID是键/值对“name” 我该怎么做 1。数组 [0] => Array ( [name] => first [logo] => url [cat] => abc ) [1] => Array (

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

更清楚地说,我搜索的是MySQL中已知的连接函数。第一个数组应该由第二个数组根据ID“联接”,ID是键/值对“name”

我该怎么做

1。数组

 [0] => Array
        (
            [name] => first
            [logo] => url
            [cat] => abc
        )
[1] => Array
        (
            [name] => second
            [logo] => url
            [cat] => abc
        )
 [0] => Array
        (
            [name] => first
            [menu] => true
            [key] => value
        )
2。数组

 [0] => Array
        (
            [name] => first
            [logo] => url
            [cat] => abc
        )
[1] => Array
        (
            [name] => second
            [logo] => url
            [cat] => abc
        )
 [0] => Array
        (
            [name] => first
            [menu] => true
            [key] => value
        )
新数组(扩展结果):

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

正如你所看到的,这是非常自我解释的。在本例中,“name”键类似于一个ID(对于两个数组)。

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

$second = array_column($second, null, 'name');
(如果“name”在数组中是唯一的,那么可以这样做。我假设是这样,因为您说过它“像一个ID”。如果“name”不是唯一的,那么在重新编制索引时,您将丢失一些行,因为数组键必须是唯一的。)

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

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]);
    }
}
试试这个

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

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

谢谢,但是有些值丢失了,比如“logo”,还有,“看起来您希望结果只包含两个数组中存在的名称”……不,这不是我想要的。基本上,第一个数组很重要,第二个数组只应添加额外的键/值。@Dave18更新了答案。我添加了一个指向可执行示例的链接。如果我还没有完全理解,请告诉我。更清楚地说:我搜索的是MySQL中已知的连接函数。第一个数组应该由第二个数组“连接”,基于ID,即键/值对“name”