1.可以直接用php的内置函数array_intersect()
array array_intersect ( array $array1 , array $array2 [, array $ … ] )
array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。
代码:
<BR><?php <BR>$array1 = array("a" => "green", "red", "blue"); <BR>$array2 = array("b" => "green", "yellow", "red"); <BR>$result = array_intersect($array1, $array2); <BR>?> <BR>
输出结果:
Array( [a] => green [0] => red)
2.也可以自己写一个算法:
<BR><?php <BR>function my_array_same($a){ <BR>$b = array_unique($a); <BR>$r = array_diff_key($a,$b); <BR>echo "<pre class="prettyprint linenums">"; <BR>$k=var_dump(array_unique($r)); <BR>return $k; <BR>} <BR>$a = array("red", "green", "pink", "red", "yellow","p<i style="color:transparent">本¥文来源gaodai$ma#com搞$代*码*网(</i><strong>搞代gaodaima码</strong>ink", "red"); <BR>$r=my_array_same($a); <BR>var_dump(array_unique($r)); <BR>?> <BR>
输出结果:
array(2) {
[3]=>
string(3) “red”
[5]=>
string(4) “pink”
}
3.还可以这么写:
<BR><?php <BR>function my_array_intersect($arr1,$arr2){ <BR>for($i=0;$i<count($arr1);$i++){ <BR>$temp[]=$arr1[$i]; <BR>} <BR>for($i=0;$i<count($arr1);$i++){ <BR>$temp[]=$arr2[$i]; <BR>} <BR>sort($temp); <BR>$get=array(); <BR>for($i=0;$i<count($temp);$i++){ <BR>if($temp[$i]==$temp[$i+1]) <BR>$get[]=$temp[$i]; <BR>} <BR>return $get; <BR>} <BR>$array1 = array("green", "red", "blue"); <BR>$array2 = array("green", "yellow", "red"); <BR>echo "<pre class="prettyprint linenums">"; <BR>print_r(my_array_intersect($array1, $array2)); <BR>echo "<pre />"; <BR>?> <BR>
如果是一维的数组,第三种算法比第一种快点.上述算法都适用于一维的数组,那么多维数组怎么查找相同的元素呢?
思路:可以把多维的数组转化成一维的数组,然后再利用上述算法输出。
代码:
<BR>function toarr($arr){ //对数组进行递归,以字符串形式返回 <BR>foreach ($arr as $k=>$v){ <BR>if (!is_array($v)) { <BR>$str.=$v." "; <BR>} <BR>else{ <BR>$str.=toarr($v); <BR>} <BR>} <BR>return $str; <BR>}/*递归函数结束*/ <BR>
上式把多维数组转化成字符串,然后利用expode函数转化成一维数组即可。
联想一下,数据库返回某一字段重名的值也是这个道理,当然通过sql语句也能够实现。