我想基于相同的键/值对合并/组合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(对于两个数组)。
答案 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]);
}
}
答案 1 :(得分:0)
试试这个
$mergedArray = array_merge_recursive ($firstArray,$secondArray);
$newArray = [];
foreach( $mergedArray as $subArr ) {
$newArray = array_merge($subArr,$newArray);
}