Разбить массив на несколько если идет прерывание при увеличение значения массива на +1

263
07 декабря 2017, 01:27

Есть массив $array[1,2,3,4,5,8] В массиве нету значения 6,7. Мне нужно $array разбить на два массива, логика разбиения если значение массива не увеличивается на +1 предыдущего значения: $array_one[1,2,3,4,5] $array_two[8]

Answer 1
$i=1;
foreach ($array as $key=>$value) {
    if (isset($array[$key-1])) {
       if (($array[$key]-$array[$key-1]==1)) {
           $result[$i][]=$value;   
           } else {
           $i++;
           $result[$i][]=$value;
       }
    } else {
    $result[$i][]=$value;
    }
}

Демо

Answer 2
$arr = [1,2,3,4,5,8];
$res = [];
$i = 0;
$s = $arr[0] - 1;
foreach($arr as $x) {
   if ($x != $s+1) $i++;
   $res[$i][] = $s = $x;
}
print_r($res); 
Answer 3

Всем спасибо! Мой вариант как сделал

<?php
                    function GetRanges( $aNumbers ) {
                        $aNumbers = array_unique( $aNumbers );
                        sort( $aNumbers );
                        $aGroups = array();
                        for( $i = 0; $i < count( $aNumbers ); $i++ ) {
                            if( $i > 0 && ( $aNumbers[$i-1] == $aNumbers[$i] - 1 ))
                                array_push( $aGroups[count($aGroups)-1], $aNumbers[$i] );
                            else
                                array_push( $aGroups, array( $aNumbers[$i] ));
                        }
                        $aRanges = array();
                        foreach( $aGroups as $aGroup ) {
                            if( count( $aGroup ) == 1 )
                                $aRanges[] = $aGroup[0];
                            else
                                $aRanges[] = $aGroup[0] . '-' . $aGroup[count($aGroup)-1];
                        }
                        return implode( ',', $aRanges );
                    }
                    $aNumbers = array( 1, 2, 3, 4, 5, 6, 10, 11, 12, 13, 20, 24 );
                    echo( GetRanges( $aNumbers ));
                    ?>

Выводит: 1-6,10-13,20,24

READ ALSO
Отправить несколько вложений из формы

Отправить несколько вложений из формы

Есть форма, в ней несколько <input type="file" name="foto[]" multiple id="foto" class="w100" accept="image/*">

245
Не работает modx ошибка - Site temporarily unavailable

Не работает modx ошибка - Site temporarily unavailable

Не работает modx ошибка - Site temporarily unavailableВ логах выявил следующею ошибку -

311
Объединение объектов класса С++

Объединение объектов класса С++

Нужна помощь с выполнением задания: Создать класс-однонаправленный список с элементами типа charПерегрузить операции: объединение списков,доступ...

261