PHP輸出數(shù)組中重名的元素的幾種處理方法
更新時間:2012年09月05日 22:54:03 作者:
PHP輸出數(shù)組中重名的元素的幾種處理方法,需要的朋友可以參考下
1.可以直接用php的內(nèi)置函數(shù)array_intersect()
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect() 返回一個數(shù)組,該數(shù)組包含了所有在 array1 中也同時出現(xiàn)在所有其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
代碼:
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
?>
輸出結(jié)果:
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));
?>
輸出結(jié)果:
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/>";
?>
如果是一維的數(shù)組,第三種算法比第一種快點(diǎn).上述算法都適用于一維的數(shù)組,那么多維數(shù)組怎么查找相同的元素呢?
思路:可以把多維的數(shù)組轉(zhuǎn)化成一維的數(shù)組,然后再利用上述算法輸出。
代碼:
function toarr($arr){ //對數(shù)組進(jìn)行遞歸,以字符串形式返回
foreach ($arr as $k=>$v){
if (!is_array($v)) {
$str.=$v." ";
}
else{
$str.=toarr($v);
}
}
return $str;
}/*遞歸函數(shù)結(jié)束*/
上式把多維數(shù)組轉(zhuǎn)化成字符串,然后利用expode函數(shù)轉(zhuǎn)化成一維數(shù)組即可。
聯(lián)想一下,數(shù)據(jù)庫返回某一字段重名的值也是這個道理,當(dāng)然通過sql語句也能夠?qū)崿F(xiàn)。
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect() 返回一個數(shù)組,該數(shù)組包含了所有在 array1 中也同時出現(xiàn)在所有其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
代碼:
復(fù)制代碼 代碼如下:
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
?>
輸出結(jié)果:
Array( [a] => green [0] => red)
2.也可以自己寫一個算法:
復(fù)制代碼 代碼如下:
<?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));
?>
輸出結(jié)果:
array(2) {
[3]=>
string(3) "red"
[5]=>
string(4) "pink"
}
3.還可以這么寫:
復(fù)制代碼 代碼如下:
<?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/>";
?>
如果是一維的數(shù)組,第三種算法比第一種快點(diǎn).上述算法都適用于一維的數(shù)組,那么多維數(shù)組怎么查找相同的元素呢?
思路:可以把多維的數(shù)組轉(zhuǎn)化成一維的數(shù)組,然后再利用上述算法輸出。
代碼:
復(fù)制代碼 代碼如下:
function toarr($arr){ //對數(shù)組進(jìn)行遞歸,以字符串形式返回
foreach ($arr as $k=>$v){
if (!is_array($v)) {
$str.=$v." ";
}
else{
$str.=toarr($v);
}
}
return $str;
}/*遞歸函數(shù)結(jié)束*/
上式把多維數(shù)組轉(zhuǎn)化成字符串,然后利用expode函數(shù)轉(zhuǎn)化成一維數(shù)組即可。
聯(lián)想一下,數(shù)據(jù)庫返回某一字段重名的值也是這個道理,當(dāng)然通過sql語句也能夠?qū)崿F(xiàn)。
相關(guān)文章
PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序的方法,涉及php數(shù)組的遍歷與排序相關(guān)操作技巧,需要的朋友可以參考下2016-12-12php引用計數(shù)器進(jìn)行垃圾收集機(jī)制介紹
每一種計算機(jī)語言都有自己的自動垃圾回收機(jī)制,讓程序員不必過分關(guān)心程序內(nèi)存分配,php也不例外,但是在面向?qū)ο缶幊?OOP)編程中,有些對象需要顯式的銷毀;防止程序執(zhí)行內(nèi)存溢出2012-09-09PHP根據(jù)文章內(nèi)容生成關(guān)鍵詞自動化Keywords標(biāo)簽
這篇文章主要為大家介紹了PHP根據(jù)文章內(nèi)容生成關(guān)鍵詞實(shí)現(xiàn)自動化Keywords標(biāo)簽實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12PHP學(xué)習(xí)之?dāng)?shù)組值的操作
PHP中,用list來析取數(shù)組中的值,如list($a, $b) = $array。2011-04-04