您好,欢迎访问一九零五行业门户网

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

要求将二维数组中组合形式重复的键和值去掉,比如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’便不再存储,这样也就达到了去掉重复组合的目的。对于重复字符串的位置的比较,是通过它在一维数组中对应的键名来进行的。
完整代码:
‘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,如果用==比较的话也会被认为是falseif($skey===false||$skey>$key){//如果没有重复组合或者重复组合在当前组合之后$res[][$varr[0]]=$varr[1];//按初始数组的键值对,重新存储}}//打印最后的结果print_r($res);?>
其它类似信息

推荐信息