我有两个需要合并的数组。我可以循环遍历每个数组并手动合并。但是,是否有内置的功能来做到这一点呢?
数组1:
Array
(
[0] => Array
(
[detail_image_id] => 6389
[product_name] => Starter broadband Package
)
[1] => Array
(
[detail_image_id] => 6358
[product_name] => Starter broadband Package
)
)数组2:
Array
(
[0] => Array
(
[detail_image_id] => 6358
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
)
[1] => Array
(
[detail_image_id] => 6389
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
)
)预期输出数组是:
Array
(
[0] => Array
(
[detail_image_id] => 6389
[product_name] => Starter broadband Package
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
)
[1] => Array
(
[detail_image_id] => 6358
[product_name] => Starter broadband Package
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
)
)我只从数组中添加了一个样本。阵列很大。对于循环和迭代器,我们是否可以使用像array_merge()或array_map()这样的PHP函数而不是手动操作呢?
发布于 2018-05-17 09:51:15
更老更聪明:我从几年前就把我的答案擦掉了,因为我不再推荐这些技巧了。将数组合并到一个foreach()循环中,然后在相关行中“联合”(+作为数组联合操作符)数据,这将是最简洁和最有效的。
空合并运算符(??)用于确保总是有“联合”的东西。
代码:(演示)
$result = [];
foreach (array_merge($array1, $array2) as $row) {
$result[$row['detail_image_id']] = ($result[$row['detail_image_id']] ?? []) + $row;
}
var_export(array_values($result));输出:
array (
0 =>
array (
'detail_image_id' => '6389',
'product_name' => 'Starter broadband Package',
'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg',
),
1 =>
array (
'detail_image_id' => '6358',
'product_name' => 'Starter broadband Package',
'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg',
),
)发布于 2018-05-17 06:40:49
你可以这样做:
$arr1 = array(); //Your array 1
$arr2 = array(); //Your array 2
//Make a temp array to that use detail_image_id as the key
$arr1Temp = array_combine( array_column($arr1,'detail_image_id'), $arr1 );
$arr2Temp = array_combine( array_column($arr2,'detail_image_id'), $arr2 );
//Get All unique detail_image_id from 2 arrays.
//This is to make sure that all detail_image_id's will be included.
//detail_image_id on 2nd array might not be present on the 1st one
$imgIds = array_unique(array_merge( array_keys($arr1Temp), array_keys($arr2Temp) ));
//Do a simple foreach loop
$result = array();
foreach( $imgIds as $val ) {
$result[] = array_merge( $arr1Temp[$val], $arr2Temp[$val] );
}
print_r( $result );这将导致:
Array
(
[0] => Array
(
[detail_image_id] => 6389
[product_name] => Starter broadband Package
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
)
[1] => Array
(
[detail_image_id] => 6358
[product_name] => Starter broadband Package
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
)
)发布于 2018-05-17 06:48:26
您可以使用array_column()和array_combine()的组合来使用detail_image_id作为键创建引用数组。然后,使用foreach()循环,可以使用运算符合并数组。
$array1 = [
['detail_image_id' => '6389', 'product_name' => 'Starter broadband Package'],
['detail_image_id' => '6358', 'product_name' => 'Starter broadband Package']
];
$array2 = [
['detail_image_id' => '6358', 'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg'],
['detail_image_id' => '6389', 'guid' => 'http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg']
];
// create associative array with detail_image_id as key,
$out = array_combine(array_column($array1, 'detail_image_id'), $array1);
foreach ($array2 as $item) {
$key = $item['detail_image_id']; // shortcut for the key,
$out[$key] = $out[$key] + $item; // merge arrays
}
print_r(array_values($out)); // reset to indexed keys (0,1,2...) 输出:
Array
(
[0] => Array
(
[detail_image_id] => 6389
[product_name] => Starter broadband Package
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-charji.jpg
)
[1] => Array
(
[detail_image_id] => 6358
[product_name] => Starter broadband Package
[guid] => http://xxx/wp-content/uploads/2018/04/broadband-4mbs-wingle.jpg
)
)https://stackoverflow.com/questions/50384669
复制相似问题