Есть массив $array[1,2,3,4,5,8] В массиве нету значения 6,7. Мне нужно $array разбить на два массива, логика разбиения если значение массива не увеличивается на +1 предыдущего значения: $array_one[1,2,3,4,5] $array_two[8]
$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;
}
}
Демо
$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);
Всем спасибо! Мой вариант как сделал
<?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
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники