#php #arrays
#php #массивы
Вопрос:
Я получил 2 следующих массива:
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']];
}
Комментарии:
1. Покажите нам, что вы пробовали с foreach, и мы сможем извлечь это оттуда.
Ответ №1:
Предполагая, что два массива являются $array1
и $array2
соответственно, вам нужно добавить новую пару ключ-значение для ‘name’ $array1
вместе с уже существующими записями.
foreach ($array1 as amp;$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. Он обновляет только один элемент из массива. Также я пробовал с amp;, но это не помогло
Ответ №2:
Это очень просто, пройдите по каждому элементу первого массива и найдите имя во втором массиве ID
из первого массива.
Таким образом, ваш код может выглядеть примерно так,
foreach ($array as $key=>$element) {
$element['name'] = $array2[$element['id']];
$array[$key]=$element; //It's necessary to update the element.
}
В приведенном выше случае $array
это первый массив, а $array2
второй массив имеет имена по id
ключу.
Комментарии:
1. Это сработало, но есть ли какие-либо идеи, как вставить ключ ‘name’ между ключами ‘id’ и ‘moreinfo’? Спасибо
2. Порядок не имеет значения в случае ассоциативного массива. Не беспокойтесь об этом так.
Ответ №3:
foreach ($array1 as $key=>$arr) {
$array1[$key]['name'] = $array2[$arr['id']];
}
Ответ №4:
может быть, это поможет вам:
$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)
Комментарии:
1. Спасибо, что показали вариант, как сохранить порядок