Heim  >  Artikel  >  Backend-Entwicklung  >  php输出数组中重名元素的几种方法

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

WBOY
WBOYOriginal
2016-07-25 08:59:501286Durchsuche
为大家介绍几个php输出数组中的重名元素的方法,有需要的朋友,可以参考下。

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

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

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

方法2、自己实现的算法

<?php  
    function my_array_same($a){  
            $b = array_unique($a);  
            $r = array_diff_key($a,$b);  
            echo "<pre class="brush:php;toolbar:false">";  
            $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、自定义递归函数

<?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 class="brush:php;toolbar:false">";  
    print_r(my_array_intersect($array1, $array2));  
    echo "<pre/>";  
?>

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

<?php
    function toarr($arr){ //对数组进行递归,以字符串形式返回  
        foreach ($arr as $k=>$v){  
             if (!is_array($v)) {  
                $str.=$v." ";  
             }  
             else{  
                $str.=toarr($v);  
             }  
        }     
      return $str;  
    }/*递归函数结束*/  
?>

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

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



Stellungnahme:
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