当前位置:Gxlcms > PHP教程 > 显示不相邻的数据

显示不相邻的数据

时间:2021-07-01 10:21:17 帮助过:5人阅读

已知$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',  ),)


现将同pono的数据合并,得:
$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        ))


现在想求仅显示不相邻的no,如例中的项:
[0] => Array
(
[pono] => a
[no] => 4711,4714
)

请问怎么求?


回复讨论(解决方案)

$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        ))



非常感谢!

   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??值的情?。

人气教程排行