我有两个阵列就像这样。
第一个数组
Array
(
[0] => Array
(
[manufacture] => Moto
[name] => ZSX 125
[code] => ZS125-48A
[cc] => 125
[bike_type] => 3 Motorcycle
[title] => Mto ZSX 125
[about] => The ZSX
)
[1] => Array
(
[manufacture] => Moto
[name] => LSM 125
[code] => STR125YB
[cc] => 125
[bike_type] => 6 Endurancemotor
[title] => Moto
[about] => Moto
)
)
第二个数组
Array
(
[0] => Array
(
[id] => 183
[model] => ZS125-48A
[engine_brand] => 158FMI-B
[engine_type] => Single Cylinder
)
[1] => Array
(
[id] => 172
[model] => STR125YB
[engine_brand] => K154FMI
[engine_type] => Single Cylinder
)
)
正如您所看到的,第一个数组中的“代码”与第二个数组中的“模型”相同,并且始终存在匹配。
这是我想要的数组。
Array
(
[0] => Array
(
[id] => 183
[model] => ZS125-48A
[engine_brand] => 158FMI-B
[engine_type] => Single Cylinder
[manufacture] => Moto
[name] => ZSX 125
[code] => ZS125-48A
[cc] => 125
[bike_type] => 3 Motorcycle
[title] => Moto ZSX 125
[about] => The ZSX
)
[1] => Array
(
[id] => 172
[model] => STR125YB
[engine_brand] => K154FMI
[engine_type] => Single Cylinder
[manufacture] => Moto
[name] => LSM 125
[code] => STR125YB
[cc] => 125
[bike_type] => 6 Endurancemotor
[title] => Moto
[about] => Moto
)
)
这可能吗?我已经尝试过array_merge和array_merge_recursive,但它只将第二个数组附加到第一个数组的末尾,它不会将它合并到键上。
答案 0 :(得分:3)
在我看来应该这样做:
$array3 = array_map('array_merge', $array1, $array2);
这会将$array1[0]
和$array2[0]
提供给array_merge
,然后$array1[1]
和$array2[1]
等。
答案 1 :(得分:3)
如果两个数组同步,则Deceze的解决方案是完美的(即匹配code
和model
的项在两个数组中都处于相同的索引处)。如果不是这种情况,则需要多行代码。
数组需要有字符串键才能与array_merge
合并。在这种情况下,您希望根据code
重新设置第一个,并根据model
重新设置第二个。重新加密后,您可以将它们与array_merge_recursive
合并。
PHP 5.5 +中的重新加密很容易:
// array_column will conveniently rekey when the second argument is null
$array1 = array_column($array1, null, 'code');
$array2 = array_column($array2, null, 'model');
在早期版本中有点复杂:
// array_map is a more complicated way to extract a column from an array
// and array_combine will do the rekeying
$array1 = array_combine(
array_map(function($i) { return $i['code']; }, $array1),
$array1);
$array2 = array_combine(
array_map(function($i) { return $i['model']; }, $array2),
$array2);
在这两种情况下,最后一步都是相同的:
$result = array_merge_recursive($array1, $array2);
答案 2 :(得分:0)
而且,如果您更喜欢“更简单”的代码......: - )
$result = array();
foreach ($one as $a) {
foreach ($two as $b) {
if ($a->code == $b->model) {
array_push($result, array_merge($a, $b));
break;
}
}
}
print_r($result);