PHP在同一个键上合并两个数组

PHP在同一个键上合并两个数组,php,arrays,multidimensional-array,array-merge,Php,Arrays,Multidimensional Array,Array Merge,我看到两个阵列是这样排列的 第一阵列 Array ( [0] => Array ( [manufacture] => Moto [name] => ZSX 125 [code] => ZS125-48A [cc] => 125 [bike_type] => 3 Motorcycle [title

我看到两个阵列是这样排列的

第一阵列

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 
        )
)

这可能吗?我已经尝试过数组合并和数组合并递归,但它只将第二个数组附加到第一个数组的末尾,它不会在键上合并它。

在我看来,这样做应该可以:

$array3 = array_map('array_merge', $array1, $array2);

这将
$array1[0]
$array2[0]
馈送到
array\u merge
,然后
$array1[1]
$array2[1]
等。如果两个数组是同步的(即具有匹配的
code
model
的项目在两个数组中处于同一索引),Deceze的解决方案是完美的。如果不是这样,您将需要多行代码

数组需要有字符串键才能与
array\u merge
合并。在这种情况下,您希望根据
code
重新键入第一个,并根据
模型重新键入第二个。重新设置关键帧后,可以将它们与
数组\u merge\u 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);
如果您喜欢“更简单”的代码…:-)


可以,但要满足OP的全部要求,它应该是
$array3=array\u map('array\u merge',$array2,$array1)
因此,将在带有ID键的array2前面加上前缀+在我看来,它就像是从DB中提取出来的东西。如果是这样的话,在
model
+1列中加入结果就不容易了,因为详细的解释和解决方案:)我认为数组是同步的,它们在我看来就像是从DB中提取的,这让我觉得OP可以在选择时直接加入
model=>code
上的结果,但这只是一个猜测:)
$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);