#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);