为大家介绍几个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 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、自定义递归函数
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 class=" brush:php;toolbar:false ">" ;
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语句也是可以实现的。
编程就是这样,条条大道通罗马,举一返三,触类而旁通,多学多练多实践,功到自然成啊。
程序员之家,祝大家学习进步。
|