PHP输出数组中重名的元素的几种处理方法

前端之家收集整理的这篇文章主要介绍了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 "
"; 
$k=var_dump(array_unique($r));
return $k;
}
$a = array("red","green","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$temp[]=$arr1[$i];
}
for($i=0;$i$temp[]=$arr2[$i];
}
sort($temp);
$get=array();
for($i=0;$iif($temp[$i]==$temp[$i+1])
$get[]=$temp[$i];
}
return $get;
}
$array1 = array("green","blue");
$array2 = array("green","red");
echo "
"; 
print_r(my_array_intersect($array1,$array2));
echo "
"; 
?>

如果是一维的数组,第三种算法比第一种快点.上述算法都适用于一维的数组,那么多维数组怎么查找相同的元素呢? 思路:可以把多维的数组转化成一维的数组,然后再利用上述算法输出代码
代码如下:
function toarr($arr){ //对数组进行递归,以字符串形式返回
foreach ($arr as $k=>$v){
if (!is_array($v)) {
$str.=$v." ";
}
else{
$str.=toarr($v);
}
}
return $str;
}/*递归函数结束*/

上式把多维数组转化成字符串,然后利用expode函数转化成一维数组即可。 联想一下,数据库返回某一字段重名的值也是这个道理,当然通过sql语句也能够实现。

猜你在找的PHP相关文章