Home > Backend Development > PHP Tutorial > 显示不相邻的数据

显示不相邻的数据

WBOY
Release: 2016-06-23 13:52:20
Original
977 people have browsed it

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


现将同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        ))
Copy after login


现在想求仅显示不相邻的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);
Copy after login


Array(    [0] => Array        (            [pono] => a            [no] => 4711,4714        ))
Copy after login



非常感谢!

<?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;}?>
Copy after login

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template