Добрый день. Решаю одну задачку по PHP, цель задачки - создание функции, которая получив на вход массив, возвращает массив линейно возрастающих чисел в виде строк "min -> max".
Предварительно написал решение на JS, которое работает
https://playcode.io/327606?tabs=console&script.js&... (так просто дебажить проще). Но когда переделал тоже самое под PHP то на выходе получаю пустой массив. Есть подозрение, что где-то в коде обращаюсь к несуществующей переменной, которую JS умеет проглатывать, a PHP нет. В чём может быть проблема?
Сам код решения вот:
function summaryRanges($arr) {
//Проверяю, если массив пустой или из одного элемента то возвращаю пустой массив
if(count($arr) === 1 || count($arr) === 0) {
return [];
}
$copyArr = $arr; //Копия массива, чтобы не кромсать исходный
$chunk = []; //Массив под кусок диапазона
$chunkGroup = []; //Массив под группу кусков диапазона
$result = []; //Результирующий массив
//Перебираю массив
for($i = 0; $i < count($copyArr); $i++) {
//Проверяю, есть ли элемент i+1, если нет - прерываю цикл, чтобы не было обращения к несуществ. индексу
if(array_key_exists($i + 1, $copyArr)) {
//Если разность следующего и текущего элемента равна 1, то число линейно возврастает
if($copyArr[$i + 1] - $copyArr[$i] === 1) {
//Значит его надо запихать в кусок
$chunk[] = $copyArr[$i];
}
//Если нет, то линейно не возрастает
else {
//Если при этом в куске пусто, значит число единственное в последовательности и его надо пропустить
if(empty($chunk)) {
continue;
}
else {
//Если кусок не пустой, то надо докинуть последний элемент в него
$chunk[] = $copyArr[$i];
//Затем кинуть сам кусок в группу
$chunkGroup[] = $chunk;
//И обнулить
$chunk = [];
//Из массива вырезать ту часть, что улетела в кусок
array_slice($copyArr, $i + 1);
//Сбросить счётчик, чтобы на новой итерации он начинал с 0
$i = -1;
}
}
}
break;
}
//В результирующий массив закидываются строки вида "первый элемент вложенного массива -> последний элемент вложенного массива"
for($j = 0; $j < count($chunkGroup); $j++) {
$result[] = $chunkGroup[j][0] . "->" . $chunkGroup[j][count($chunkGroup[j]-1)];
}
return $result;
}
print_r(summaryRanges([110, 111, 112, 113, 1,2,3, 111, -5, -4, -3, -2, -3, -4, -5]));