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