在 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
)
)
试试这个
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');
<?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
)
)
试试这个
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');