PHP — Как создать многомерный массив, сгруппировав один и тот же элемент из массива?

#php #arrays

Вопрос:

Например, у меня есть массив $tempArr , в котором его элемент, как показано :

 Array
(
 [0] => 1
 [1] => 1
 [2] => 1
 [3] => 2
 [4] => 2
 [5] => 2
 [6] => 1
 [7] => 1
 [8] => 2
 [9] => 2
 [10] => 1
 ....
)
 

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

 Array
(
[0] => Array
    (
        [0] => 1
        [1] => 1
        [2] => 1
    )

[1] => Array
    (
        [0] => 2
        [1] => 2
        [2] => 2
    )

[2] => Array
    (
        [0] => 1
        [1] => 1
    )

[3] => Array
    (
        [0] => 2
        [1] => 2
    )

[4] => Array
    (
        [0] => 1
    )
....
)
 

Пожалуйста, помогите. Я работаю над этим уже несколько часов и все еще не могу сделать это правильно.

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

1. Пожалуйста, покажите код, который вы пробовали.

Ответ №1:

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

 $input = [1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1];

$output = [];
$idx = -1; // init with -1, so we get a start index of 0 after first increment
$prev = null; // init $prev with a value that won't be equal to the first
              // array value in any case
foreach($input as $val) {
    if($prev !== $val) {
          $idx;
    }
    $output[$idx][] = $val;
    $prev = $val; // set current item as new previous one
}

print_r($output);
 

https://3v4l.org/c2Irh