Как проверить значение массива и сгруппировать их в Stack Overflow

у меня есть массив:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 7 )

Как сделать условие в PHP при зацикливании я могу получить вывод:

$datarange = 1-3,7;

у меня есть логика, как это:

if (value of array[0] + 1) = value of array[1] {
$datarange = value of array[0] - value of array[1];
}else{
$datarange = value of array[0] , value of array[1];
}

но я не знаю, как реализовать это в моем цикле

1

Решение

Вот функция, которая будет делать диапазоны, когда это возможно, в массиве чисел.

<?php
function getRange($numbers) {
$lastNumber = null;
$currentRange = [];
$ranges = [];
foreach ($numbers as $number) {
if ($lastNumber === null) { // first iteration, add the number to current range
$currentRange[] = $number;
}
else {
if ($number - $lastNumber === 1) { // if difference with last number is 1, they're consecutive
$currentRange[] = $number;
}
else { // they're not consecutive, finish current range and start a new one
$ranges[] = $currentRange;
$currentRange = [$number];
}
}
$lastNumber = $number; // set the last number to compare with the next
}
$ranges[] = $currentRange; // add last range
$rangesString = []; //
foreach ($ranges as $range) {
$str = $range[0];
if (count($range) > 1) {
$str .= "-".$range[count($range) - 1];
}
$rangesString[] = $str;
}
return implode(", ", $rangesString);
}
echo getRange([1,2,3,7]); // result = 1-3, 7
echo getRange([1,2,6,9,10,12,15,17,18,19]); // result = 1-2, 6, 9-10, 12, 15, 17-19
1

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

Попробуй это. Я должен изменить вашу логику и применить ее в цикле. для диапазона:

$arr = array(1,2,3,7);

$last_val = "";
$first_val = "";
$add_val = true;
foreach ($arr as $key => $value) {
if($first_val == "")
$first_val = $value;
if(isset($arr[$key+1]))
{
if($value+1 == $arr[$key+1])
{
$last_val = $arr[$key+1];
$add_val = false;
}
else
$add_val = true;
}
else
$add_val = true;

if($add_val)
{
if($last_val != "")
$datarange[] = $first_val."-".$last_val;
else
$datarange[] = $first_val;
$first_val = "";
$last_val = "";
}
}
echo implode(",", $datarange);

DEMO

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector