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

У меня есть такой массив:

[0 => 0, 1 => 0, 2 => 0, 3 => 1, 4 => 1, 5 => 0, 6 => 0]

Так что его области 0 пересекаются областями 1 но меня интересуют только области 0

Итак, что я пытаюсь добиться, это сгруппировать каждое из значений, равное 0, в другой массив значений, например:

[Group1 => 3, Group2 => 2]

что я сделал до сих пор:

$arrayGroups = [];
for($i=0;$i < count($myArr);$i++) {
if($myArr[$i] == 0 && $myArr[$i+1] != 1) {
(isset($arrayGroups [0])) ? $arrayGroups [0] += 1 : $arrayGroups [0] = 1;
}
}

Это довольно хорошо работает, но я заблокирован от того, как заполнить массив большим количеством групп.

Спасибо за помощь

1

Решение

Используйте переменную-счетчик, которую вы увеличиваете при запуске новой группы.

$counter = 0;
$in_group = false;
$arrayGroups = [];
foreach ($myArr as $val) {
if ($val == 0) {
if ($in_group) {
$arrayGroups[$counter]++;
} else {
$in_group = true;
$counter++;
$arrayGroups[$counter] = 1;
}
} else {
$in_group = false;
}
}

DEMO

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]