程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP輸出數組中重名的元素的幾種處理方法

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 "<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語句也能夠實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved