去掉二维数组中的重复组合的实现代码

WBOY
Freigeben: 2016-07-25 09:00:22
Original
909 Leute haben es durchsucht
要求将二维数组中组合形式重复的键和值去掉,比如array( array(‘a’ => ‘b’), array(‘b’ => ‘a’) ); 为相同组合, 只保留array(‘a’ => ‘b’)。

注意组合与排列是不同的,(a,b)和(b,a)是相同的组合,但是它们是不同的排列。

小技巧: 1、将二维数组转换为一维数组,具体是把二维数组的键和值进行组合,全部存储在一维数组中,如array(‘a’ => ‘b’),我们将键和值转换成形如a-b的字符串 然后,存储在一维数组中,加’-'是为了后面的比较时,可以还原原来的键值对。

2、转换之后,先把重复的字符串去掉,在示例中是’b-d’,它重复了2次,去掉一个。再进行比较。我们的比较思路是这样的,如存储在一维数组中的键值字符串’a-b’,我们将它在转换成’b-a’,然后在一维数组中进行搜索,如果数组中不存在形如’b-a’的字符串,那么说明’a-b’没有重复的组合,然后将’a-b’拆分,按初始数组的形式存储到二维数组中;如果数组中存在形如’b-a’的字符串,并且位于’a-b’字符串之后,那么,说明‘a-b’字符串存在重复的组合,但是我们仍然将其拆分然后存储在二维数组中。这是因为,重复的组合’b-a’位于’a-b’之后,当我们循环处理到字符串’b-a’时,会得到字符串’b-a’也存在重复的字符串组合’a-b’,但是’a-b’再’b-a’之前,我们已经存储过了,因此’b-a’便不再存储,这样也就达到了去掉重复组合的目的。对于重复字符串的位置的比较,是通过它在一维数组中对应的键名来进行的。

完整代码:

<?php
//数组初始化
$array = array(
array(‘a’ => ‘b’),
array(‘a’ => ‘c’),
array(‘a’ => ‘d’),
array(‘b’ => ‘a’),
array(‘b’ => ‘c’),
array(‘b’ => ‘d’),
array(‘b’ => ‘d’),
array(‘c’ => ‘a’),
array(‘d’ => ‘a’),
array(‘d’ => ‘e’)
);
//循环二维数组,得到一维数组
foreach($array as $key=>$value){
foreach($value as $key2=>$value2){
$new[]=$key2.’-’.$value2;
}
}
//去掉一维数组中的重复项
$new=array_unique($new);
//循环一维数组
foreach($new as $key=>$value){
$varr=explode(‘-’,$value);//拆分字符串
$nval=$varr[1].’-’.$varr[0];//重组字符串
$skey=array_search($nval,$new);//在数组中搜索,字符串,如果有返回键名,没有返回false
//注意这里对flase的比较一定要用===,而不能用==,因为特殊的键0,如果用==比较的话也会被认为是false
if($skey===false||$skey>$key){//如果没有重复组合或者重复组合在当前组合之后
$res[][$varr[0]]=$varr[1];//按初始数组的键值对,重新存储
}
}
//打印最后的结果
print_r($res);
?>
Nach dem Login kopieren


Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage