本帖最后由 lazygc520 于 2014-08-05 14:02:30 编辑

解决方案 »

  1.   


    $arrs = array (
      0 => 
      array (
        'pono' => 'a',
        'no' => '4711',
      ),
      1 => 
      array (
        'pono' => 'a',
        'no' => '4714',
      ),
      2 => 
      array (
        'pono' => 'b',
        'no' => '4714',
      ),
      3 => 
      array (
        'pono' => 'b',
        'no' => '4715',
      ),
      4 => 
      array (
        'pono' => 'c',
        'no' => '4715',
      ),
      5 => 
      array (
        'pono' => 'c',
        'no' => '4716',
      ),
    );
    $tmp=array();
    $data=array();
    $i=0;
    foreach($arrs as $key=>$arr){
            if(!empty($tmp) && array_key_exists($arr['pono'],$tmp)){
            $key=$tmp[$arr['pono']];
            $arr_no=explode(',',$data[$key]['no']);
            if(!in_array($arr['no'],$arr_no)) $data[$key]['no'].=','.$arr['no'];
        }else{
            $tmp[$arr['pono']]=$i;
            $data[$i++]=$arr;
        }
    }
    print_r($data);$result = array();foreach($data as $val){
    list($a, $b) = explode(',', $val['no']);
    if(abs($a-$b)!=1){
    array_push($result, $val);
    }
    }print_r($result);Array
    (
        [0] => Array
            (
                [pono] => a
                [no] => 4711,4714
            ))
      

  2.   


    <?php
    $arrs = array (
      0 => 
      array (
        'pono' => 'a',
        'no' => '4711',
      ),
      1 => 
      array (
        'pono' => 'a',
        'no' => '4714',
      ),
      2 => 
      array (
        'pono' => 'b',
        'no' => '4714',
      ),
      3 => 
      array (
        'pono' => 'b',
        'no' => '4715',
      ),
      4 => 
      array (
        'pono' => 'c',
        'no' => '4715',
      ),
      5 => 
      array (
        'pono' => 'c',
        'no' => '4716',
      ),
      6 => 
      array (
        'pono' => 'a',
        'no' => '4712',
      ),
      7 => 
      array (
        'pono' => 'a',
        'no' => '4713',
      ),
      8 => 
      array (
        'pono' => 'a',
        'no' => '4719',
      ),
    );
    $tmp=array();
    $data=array();
    $i=0;
    foreach($arrs as $key=>$arr){
            if(!empty($tmp) && array_key_exists($arr['pono'],$tmp)){
            $key=$tmp[$arr['pono']];
            $arr_no=explode(',',$data[$key]['no']);
            if(!in_array($arr['no'],$arr_no)) $data[$key]['no'].=','.$arr['no'];
        }else{
            $tmp[$arr['pono']]=$i;
            $data[$i++]=$arr;
        }
    }
    print_r($data);$result = array();foreach($data as $val){
    $tmp = explode(',', $val['no']);
    if(!checkSerialNum($tmp)){
    array_push($result, $val);
    }
    }print_r($result);// 判斷數組內元素是否連續數字
    function checkSerialNum($arr){
    asort($arr);
    $arr = array_values($arr);
    for($i=0,$len=count($arr)-1; $i<$len; $i++){
    if(abs($arr[$i]-$arr[$i+1])!=1){
    return false;
    }
    }
    return true;
    }?>優化了一下,可以支持'no'不指定2個數值的情況。