php вставка значений из одного массива в другой

#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. Спасибо, что показали вариант, как сохранить порядок