Объединить два массива в один многомерный массив

#php #arrays

#php #массивы

Вопрос:

Итак, у меня есть два отдельных массива. Один с идентификаторами цели, а другой с именем цели. Оба находятся в хронологическом порядке.

Пример:

   $array[1] => Array
    (
        [0] => 113139803806479652682
        [1] => 100276549585470687394
    )
 

и

  $array[2] => Array
    (
        [0] => EDM
        [1] => Space
    )
 

Таким образом, в $array [1] [0] в этом — идентификатор для «EDM» (как показано в $array [2]), а затем [1] в $array [1] — идентификатор имени для «Space».

Чего я хочу добиться, так это вывода нового массива, который будет выглядеть следующим образом:

   [0] => Array
 ( 
  [0] => 113139803806479652682
  [1] => EDM
 )
  [1] => Array
 (
 [0] => 100276549585470687394
 [1] => Space
 )
 

По сути, новый массив, который возвращает многомерный массив с идентификатором и именем в том же массиве, что и взятый из двух отдельных массивов, в которых имена и идентификаторы уже были упорядочены, просто я хочу, чтобы они были сформированы, чтобы они шли вместе.

Я надеюсь, что в этом есть смысл. Я немного новичок в PHP и программировании в целом.

Ответ №1:

 $results = [];

foreach($array1 as $key => $value) {
    $results[$key] = [$array1[$key],$array2[$key]];
}
 

Комментарии:

1. Хорошо. Мой массив, с которым я работаю, уже является многомерным массивом. Я в основном хочу объединить результаты [1] и [4] ([1] — идентификаторы, а [4] — имена) в новый многомерный массив, объединяющий идентификаторы и имена в массив друг друга. Если это имеет значение с тех пор.

2. может $results[$key] = [$array1[$key][1],$array2[$key][4]] быть? если ваш массив отличается от того, что показано в вопросе, пожалуйста, обновите вопрос.

Ответ №2:

  $newarray=array();

foreach($array1 as $k=>$val){

  $newarray[$k]['ID'] = $val;
  $newarray[$k]['name'] = $array2[$k];

}
 

Комментарии:

1. О чем этот код? Вы также должны включить brief.

2. Это решение слишком буквально использует простой английский язык OP и не дает желаемого результата. Кроме того, это не отдельные массивы, это два подмассива внутри родительского массива.

Ответ №3:

Возможно, это не самое элегантное решение, но оно сделает свое дело. Вот код:

 $arraySum = array();
for($i=0; $i<count($array1); $i  ) {
    $arraySum[$i][$i] = $array1[$i];
    $arraySum[$i][$i 1] = $array2[$i];
}
 

Комментарии:

1. Вызов count() на каждой итерации цикла не является лучшей практикой — его следует кэшировать. Нет $array1 ни $array2 для использования, поэтому этот код не будет работать для опубликованного вопроса. $arraySum это плохой выбор для имени переменной, поскольку оно не содержит никаких суммированных данных. Все ответы, даже простые, должны быть объяснены исследователям.

Ответ №4:

Вызывая array_map() null параметр обратного вызова и оператор splat $array , чтобы «распаковать его» в виде нескольких одномерных входных массивов, вы можете умело сгенерировать желаемый, переиндексированный выходной массив в краткой однострочной форме.

Код: (Демо)

 $array[1] = [
     '113139803806479652682',
     '100276549585470687394'
];

$array[2] = [
     'EDM',
     'Space'
];

var_export(array_map(null, ...$array));
 

Вывод:

 array (
  0 => 
  array (
    0 => '113139803806479652682',
    1 => 'EDM',
  ),
  1 => 
  array (
    0 => '100276549585470687394',
    1 => 'Space',
  ),
)