如何检查数组值并在php中对它们进行分组

时间:2017-08-16 05:22:45

标签: php arrays loops

我有阵列:

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];
}

但我不知道如何将其实现到我的循环

2 个答案:

答案 0 :(得分: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 :(得分:0)

试试这个。我已经改变了你的逻辑并将其应用于循环中。适用范围:

$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

相关问题