欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

显示不相邻的数据

程序员文章站 2024-01-24 12:27:40
...
已知$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

?化了一下,可以支持'no'不指定2??值的情?。