$data = array(1,2,3,6,7,8,9,10,12,14,16,17,18,19,20,23,28,29,30,35,36);要取出的正确结果1 2 36 7 8 9 10121416 17 18 19 20 2328,29,3035,36两个连续的如35,36 可以分开单独显示1 2 36 7 8 9 10121416 17 18 19 20 2328,29,303536这样也可以

解决方案 »

  1.   


    $data = array(1,2,3,6,7,8,9,10,12,14,16,17,18,19,20,23,28,29,30,35,36);
    //print_r($data);
    $j=-1;$y=0;
    foreach($data as $key=>$value){
    $j++;$i=$data[$key-1];
    if($i==($value-1)){
    if($j==($j-1))$y++;
    $str[$y][]=$value;
    }else{
    $y++;
    $str[$y][]=$value;
    }
    }
    print_r($str);
      

  2.   

     if($j==($j-1))$y++;  这句多余
      

  3.   


    $data = array(1,2,3,6,7,8,9,10,12,14,16,17,18,19,20,23,28,29,30,35,36);
    //print_r($data);
    $j=-1;$y=0;
    foreach($data as $key=>$value){
        $j++;$i=$data[$key-1];
        if($i==($value-1)){
            $str[$y][]=$value;
        }else{
            $y++;
            $str[$y][]=$value;
        }
    }
    print_r($str);
      

  4.   

     public function sdfasfaf($array) {
            $i = 0;
            $tmp;
            foreach ($array as $k=>$v)
            {
                if($v == $array[$k-1]+1 || $v == $array[$k+1]-1)
                {
                    $tmp = (int)$v;
                    if (isset($data[$i]) && @end($data[$i])+1 == $tmp)
                    {
                        $data[$i][] = $tmp;
                        $data[$i][] = $tmp;
                    } else {
                        $data[++$i][] = $tmp;
                    }
                } else {
                        $data[++$i][] = $v;
              }
            }
        return $data;
        }
      

  5.   

    $data = array(1,2,3,6,7,8,9,10,12,14,16,17,18,19,20,23,28,29,30,35,36);
    for($i=0;$i<count($data);$i++){
    if($data[($i+1)]-$data[$i] ==1){
    echo $data[$i].' ';
    }else{
    echo $data[$i].'<br>';
    }
    }
      

  6.   

    foreach($data as $key => $value){
    if($value - $data[($key-1)] == 1){

    echo ' '.$value.' ';
    }else{
    echo '<br>'.$value;
    }
    }
      

  7.   

    foreach($data as $key => $value){
    if($data[($key+1)]- $value == 1 && $data[($key+2)]- $value == 2){ //判断第一个值与后面两个值是否连续
    echo ' '.$value.' ';
    }elseif($value - $data[($key-1)] == 1 && $data[($key+1)]- $value == 1){ //判断值与前面和后面两个值是否连续
    echo ' '.$value.' ';
    }elseif($value - $data[($key-1)] == 1 && $value - $data[($key-2)] == 2){//判断第值与前面两个值是否连续
    echo ' '.$value.'<br>';
    }else{
    echo ''.$value.'<br>';
    }
    }
      

  8.   

    header("Content-type:text/html;charset=utf8");
    $data = array(1,2,3,6,7,8,9,10,12,14,16,17,18,19,20,23,28,29,30,35,36);
    $i = 0;
    $j = 0;
    $result = array();
    $length = count($data)-1;
    foreach ($data as $key=>$value){
    if($key<$length){
    if(($data[$i]+1) == $data[$i+1]){
    $result[$j][] = $data[$i];
    }else{
    $result[$j][] = $data[$i];
    $j++;
    }
    $i++;
    }else{
    if(($data[$i]-1)== $data[$i-1]){
    $result[$j][] = $data[$i];
    }else{
    $result[$j+1][] = $data[$i];
    }
    }
    }
    print_r($result);
      

  9.   

    <?php
    $data = array(1,2,3,6,7,8,9,10,12,14,16,17,18,19,20,23,28,29,30,35,36);
    $j = 0;
    $array[$j][] = $data[0];
    for($i = 1; $i<count($data); $i++){
    if(($data[$i]-$data[$i-1]==1)){
    $array[$j][] = $data[$i];
    }else{
    $j++;
    $array[$j][] = $data[$i];
    }
    }
    print_r($array);?>
      

  10.   

    再给两个参考资料:php 正则匹配连续相同数字刚一个同事遇到一个问题,需要匹配连续相同的数字,如:###333ddvv777###,在这里就得匹配333和777,正好回顾一下php的正则函数,方法如下:<?php$str="##111iii888##";$n=preg_match_all("/(\d)\\1{2}/",$str,$s);echo "<pre>";var_dump($s);?>
    rst:array(2) {
    [0]=>
    array(2) {
        [0]=>
        string(3) "111"
        [1]=>
        string(3) "888"
    }
    [1]=>
    array(2) {
        [0]=>
        string(1) "1"
        [1]=>
        string(1) "8"
    }
    }
    ------
     
      

  11.   


    PHP 判断是否是连续的数字<?php   $arr=array(1,2,3);   function is_continuous_num($arr){      if(count($arr)==0)          return false;      for($i=0;$i<count($arr)-1;$i++){          if(is_numeric($arr[$i])){              if($arr[$i+1]-$arr[$i]!==1)                  return false;          }          else              return false;      }      return true;  }  echo is_continuous_num($arr);     ?>
     
      

  12.   

    上面这样写 结果是没有错 但是有警告的!  $data[$key-1]  如果当$key = 0;的时候 这个数值是不存在的,如果这样写代码是简洁了 但是逻辑上是有漏洞的!  个人见解