既知の $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);//得到结果:Array( [0] => Array ( [pono] => a [no] => 4711,4714 ) [1] => Array ( [pono] => b [no] => 4714,4715 ) [2] => Array ( [pono] => c [no] => 4715,4716 ))
ディスカッションへの返信(解決策)
$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 ))
ありがとうございました!
<?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;}?>