Разложить массив, чтобы каждый 2-й элемент находился в другом массиве

#php #arrays

#php #массивы

Вопрос:

Итак, я хотел бы взять «несортированный» массив и получить каждый второй элемент из «несортированного» массива и поместить его в новый массив, так что осталось два массива.

 $unsorted = array("present","Bob","late","Jessie","late","Carl","present","Jessica","absent","Adam","present","Hope");
  

Я думал о создании for цикла, но не смог найти никаких функций для создания двух массивов.

Любая помощь будет с благодарностью принята, спасибо!

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

1. Что вы сделали до сих пор?

2. Это не сортировка. Сортировка приводит массив в порядок.

3. Почему for цикл не работает? Если индекс четный, поместите элемент в первый массив. Если это нечетно, поместите элемент во второй массив.

4. Зачем вам два массива? Похоже, это должен быть ассоциативный массив, например ["Bob" => "present", "Jessie" => "late", ...]

5. Почему бы не создать его как ассоциативный массив в первую очередь, вместо чередования подобным образом?

Ответ №1:

Одним из вариантов является использование классического foreach цикла.

 $unsorted = array("present","Bob","late","Jessie","late","Carl","present","Jessica","absent","Adam","present","Hope");

$array1 = array();
$array2 = array();
foreach( $unsorted as $key => $val ) {
    if ( $key % 2 ) $array2[] = $val;
    else $array1[] =  $val;
}
  

$array1 приведет к:

 Array
(
    [0] => present
    [1] => late
    [2] => late
    [3] => present
    [4] => absent
    [5] => present
)
  

$array2 приведет к:

 Array
(
    [0] => Bob
    [1] => Jessie
    [2] => Carl
    [3] => Jessica
    [4] => Adam
    [5] => Hope
)
  

Ответ №2:

Просто, но нужно некоторое понимание:

 $unsorted = array("present","Bob","late","Jessie","late","Carl","present","Jessica","absent","Adam","present","Hope");
$sorted = array_map(null, ...array_chunk($unsorted, 2));
print_r($sorted);
  

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

1. Вы должны объяснить, как это работает, поскольку это «требует некоторого понимания».