php输出数组中重名元素的几种方法

发布时间:2020-04-06编辑:脚本学堂
为大家介绍几个php输出数组中的重名元素的方法,有需要的朋友,可以参考下。

方法1、直接用php的内置函数array_intersect()
array array_intersect ( array $array1 , array $array2 [, array $ ... ] ) 
array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。
例子:

1
2
3
4
5
<?php 
    $array1 = array("a" => "green", "red", "blue"); 
    $array2 = array("b" => "green", "yellow", "red"); 
    $result = array_intersect($array1, $array2); 
?>

输出结果:
Array(    [a] => green    [0] => red) 

方法2、自己实现的算法

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
    function my_array_same($a){ 
            $b = array_unique($a); 
            $r = array_diff_key($a,$b); 
            echo "<pre>"
            $k=var_dump(array_unique($r)); 
            return $k;       
            
    $a = array("red", "green", "pink""red", "yellow","pink", "red"); 
    $r=my_array_same($a); 
    var_dump(array_unique($r)); 
?>

输出结果:
    array(2) { 
      [3]=> 
      string(3) "red" 
      [5]=> 
      string(4) "pink" 
    } 

3、自定义递归函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
    function my_array_intersect($arr1,$arr2){     
        for($i=0;$i<count($arr1);$i++){         
            $temp[]=$arr1[$i];     
            }  
        for($i=0;$i<count($arr1);$i++){         
            $temp[]=$arr2[$i];     
            }  
         sort($temp);  
         $get=array();         
         for($i=0;$i<count($temp);$i++){         
            if($temp[$i]==$temp[$i+1])          
               $get[]=$temp[$i];     
             }         
         return $get; 
      
    $array1 = array("green", "red", "blue"); 
    $array2 = array("green", "yellow", "red"); 
    echo "<pre>"
    print_r(my_array_intersect($array1, $array2)); 
    echo "<pre/>"
?>

说明:
一维数组的话,第三种算法比第一种快点。
上述算法都适用于一维的数组,那么多维数组怎么查找相同的元素呢?
这里提供一种思路:可以把多维的数组转化成一维的数组,然后再利用上述算法输出。
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    function toarr($arr){ //对数组进行递归,以字符串形式返回 
        foreach ($arr as $k=>$v){ 
             if (!is_array($v)) { 
                $str.=$v." "
             
             else
                $str.=toarr($v); 
             
        }    
      return $str; 
    }/*递归函数结束*/ 
?>

以上代码实现多维数组转化成字符串,然后使用expode函数转化成一维数组即可。
试想一下,数据库返回某一字段重名的值也是这个道理,这个通过sql语句也是可以实现的。

编程就是这样,条条大道通罗马,举一返三,触类而旁通,多学多练多实践,功到自然成啊。
脚本学堂,祝大家学习进步。

84