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>";

  $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>";

  print_r(my_array_intersect($array1, $array2));

  echo "<pre/>";

  ?>

  如果是一维的数组,第三种算法比第一种快点.上述算法都适用于一维的数组,那么多维数组怎么查找相同的元素呢?

  思路:可以把多维的数组转化成一维的数组,然后再利用上述算法输出。

  代码:

  

复制代码 代码如下:

  function toarr($arr){ //对数组进行递归,以字符串形式返回

  foreach ($arr as $k=>$v){

  if (!is_array($v)) {

  $str.=$v." ";

  }

  else{

  $str.=toarr($v);

  }

  }

  return $str;

  }/*递归函数结束*/

  上式把多维数组转化成字符串,然后利用expode函数转化成一维数组即可。

  联想一下,数据库返回某一字段重名的值也是这个道理,当然通过sql语句也能够实现。