在 PHP 中组合关联数组

combine associative arrays in PHP

<?php
$arrayName1 = array(
    '0' => array('name' => 'steve' ,'age' =>51 ) , 
    '1' => array('name' => 'john' ,'age' =>48 ) , 
);

$arrayName2 = array(
    '0' => array('name' => 'Steve' ,'place' =>'downtown' ), 
    '1' => array('name' => 'John' ,'place' =>'New York' ), 
);

$output = array(
    '0' => array('name' => 'steve' ,'age' =>51, 'place' =>'downtown'  ), 
    '1' => array('name' => 'john' ,'age' =>48 ,'place' =>'New York' ), 
);

期待用“name”键组合两个数组,并获得示例结果作为 $output。 array_merge() 未按预期工作。

使用array_replace_recursive

$arrayName1 = array(
        '0' => array('name' => 'steve' ,'age' =>51 ) , 
        '1' => array('name' => 'john' ,'age' =>48 ) , 
    );

$arrayName2 = array(
    '0' => array('name' => 'steve' ,'place' =>'downtown' ), 
    '1' => array('name' => 'john' ,'place' =>'New York' ), 
);

$out = array_replace_recursive($arrayName1, $arrayName2);
print_r($out);

输出将是

Array (
    [0] => Array
        (
            [name] => steve
            [age] => 51
            [place] => downtown
        )

    [1] => Array
        (
            [name] => john
            [age] => 48
            [place] => New York
        )

)

如果不能保证在两个数组的相同索引处会出现相同的名称,则需要在$arrayName2中搜索匹配的name值,然后合并来自的值从 $arrayName1:

输入值
$names2 = array_map('strtolower', array_column($arrayName2, 'name'));
$output = array();
foreach ($arrayName1 as $array) {
    $key = array_search($array['name'], $names2);
    if ($key !== false) {
        $output[] = $array + $arrayName2[$key];
    }
    else {
        $output[] = $array;
    }
}
print_r($output);

输出:

Array
(
    [0] => Array
        (
            [name] => steve
            [age] => 51
            [place] => downtown
        )
    [1] => Array
        (
            [name] => john
            [age] => 48
            [place] => New York
        )
)

Demo on 3v4l.org

试试这个

function combine_array($array1,$array2,$combineProp){

foreach($array1 as $item){
    $combinedKey = strtolower($item[$combineProp]);
    $combinedArr1[$combinedKey] =  $item;
}

foreach($array2 as $key => $item){
    unset($item[$combineProp]);
    $combinedKey = strtolower($array2[$key][$combineProp]);
    $combinedArr2[$combinedKey] =  $item;

}

foreach($combinedArr1 as $key => $item){
    $combinedItem = $item;
    if($combinedArr2[$key]){
       $combinedItem = array_merge($item,$combinedArr2[$key]);
    }
    $resultArr[] =  $combinedItem;
}

return $resultArr;

}
 $output = combine_array($arrayName1,$arrayName2,'name');