我有两个以下阵列:
array(3) {
[0]=>
array(2) {
["id"]=> 5
["moreinfo"]=> 'moreinfo'
}
[1]=>
array(2) {
["id"]=>10,
["moreinfo"]=> 'moreinfo'
}
[2]=>
array(2) {
["id"]=>15
["moreinfo"]=> 'moreinfo'
} ... and so forth
和第二个:
array(3) {
[5] => "Mike"
[10]=> "Bob"
[15]=> "Alice" //here keys are user ids from the first array
我需要合并它们才能将字段名称添加到第一个数组中以获得以下内容:
array(3) {
[0]=>
array(3) {
["id"]=> 5,
["name"]=> Mike,
["moreinfo"]=> 'moreinfo'
}
[1]=>
array(3) {
["id"]=>10,
["name"]=> Bob,
["moreinfo"]=> 'moreinfo'
}
[2]=>
array(3) {
["id"]=>15,
["name"]=> Alice,
["moreinfo"]=> 'moreinfo'
}
我尝试使用array_merge但它没有产生所需的结果。我也使用foreach但它在数组的末尾只插入了1个名字。任何想法如何解决? 谢谢。
UPD 我的foreach尝试:
foreach($arr1 as $k => $v) {
$arr1['name'] = $arr2[$v['id']];
}
答案 0 :(得分:1)
假设两个数组分别为$array1
和$array2
,则需要为' name'添加新的键值对。在$array1
中以及预先存在的记录。
foreach ($array1 as &$arr) {
/* $arr['id'] stores 5, 10, 15... So, that implies $array2[5] i.e Mike, $array2[10] i.e Bob and so on. */
$arr['name'] = $array2[$arr['id']];
}
答案 1 :(得分:0)
foreach ($array1 as $key=>$arr) {
$array1[$key]['name'] = $array2[$arr['id']];
}
答案 2 :(得分:0)
非常简单,遍历第一个数组的每个元素,并从第一个数组中ID
查找第二个数组中的名称。
所以你的代码可能看起来像这样,
foreach ($array as $key=>$element) {
$element['name'] = $array2[$element['id']];
$array[$key]=$element; //It's necessary to update the element.
}
在上面的情况下,$array
是第一个数组,而$array2
是第二个按id
键命名的数组。
答案 3 :(得分:0)
也许这可以帮到你:
$arr1 = array(
array("id"=>5,"moreinfo"=>"moreinfo"),
array("id"=>10,"moreinfo"=>"moreinfo"),
array("id"=>15,"moreinfo"=>"moreinfo")
);
$arr2 = array(5=>"mike",10=>"Bob",15=>"Alice");
//
$result = array_map(function($elm)use($arr2){
$elm['name'] = $arr2[$elm["id"]];
return array("id"=>$elm["id"],"name"=>$elm["name"],"moreinfo"=>$elm["moreinfo"]);
},$arr1);
var_dump($result);
结果:
array (size=3)
0 =>
array (size=3)
'id' => int 5
'name' => string 'mike' (length=4)
'moreinfo' => string 'moreinfo' (length=8)
1 =>
array (size=3)
'id' => int 10
'name' => string 'Bob' (length=3)
'moreinfo' => string 'moreinfo' (length=8)
2 =>
array (size=3)
'id' => int 15
'name' => string 'Alice' (length=5)
'moreinfo' => string 'moreinfo' (length=8)