PHP数组排序与下一个值的差异


php array sorting with next value difference

谁能帮我下面这个数组排序

输入

$array=array(1,2,3,6,7,8,100,101,200);
输出:

$new_array=array(
    0=>array(1,2,3),
    1=>array(6,7,8),
    2=>array(100,101),
    3=>array(200)
);

提前感谢!

$array=array(1,2,3,6,7,8,100,101,200);
    $new_array = array();
    $lastNumber = '';
    foreach($array as $number) {
        if($lastNumber === '') {
            $otherArray = array($number);
        }
        elseif($lastNumber + 1 !== $number) {
            $new_array[] = $otherArray;
            $otherArray = array($number);
        }
        else{
            $otherArray[] = $number;
        }
        $lastNumber = $number;
    }
    $new_array[] = $otherArray;
    print_r($new_array);

可以遍历数组并检查到数组中下一个元素的距离。如果这个距离大于1,则添加一个新的子数组:

$array=array(1,2,3,6,7,8,100,101,200);
$result=array(array());
for($i=0; $i<count($array)-1; $i++)
{
      if($array[$i+1]-$array[$i]==1)
      {
            // If difference to next number is one -> push
            array_push($result[count($result)-1], $array[$i]);
      }
      else
      {
            // ... else: Push and create new array for the next element
            array_push($result[count($result)-1], $array[$i]);
            array_push($result, array());
       }
}
// Push the last number
array_push($result[count($result)-1], $array[$i]);
print_r($result);

只是array_push()的不同方法…

非常简单:循环遍历数字,记住最后一个数字,如果当前数字不是上一个数字的后继数,在结果中添加一个新数组,在结果中推入最后一个数组

$result = [];
$last = null;
foreach ($array as $number) {
    if ($last !== $number - 1) {
        $result[] = [];
    }
    $result[count($result) - 1][] = $number;
    $last = $number;
}

甚至可以去掉$last,直接读取$result 的最后一个数组元素的最后一个数组元素,但这会使代码实际上更复杂。