php array_intersect比array_diff快(附詳細(xì)的使用說(shuō)明)
更新時(shí)間:2011年07月03日 03:29:24 作者:
在PHP中,使用 array_intersect 求兩個(gè)數(shù)組的交集比使用 array_diff 求同樣兩個(gè)數(shù)組的并集要快。
如果要求數(shù)組 $a 與數(shù)組 $b 的差集的個(gè)數(shù),應(yīng)該使用 count($a) - count(array_intersect($a, $b)),而不要用 count(array_diff($a, $b));
前面要比后者快,在大數(shù)組中更為明顯。
1.array_intersect函數(shù)
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect() 返回一個(gè)數(shù)組,該數(shù)組包含了所有在 array1 中也同時(shí)出現(xiàn)在所有其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
#1 array_intersect() 例子
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
?>
這使得 $result 成為:
Array
(
[a] => green
[0] => red
)
2.自我實(shí)現(xiàn)的array_intersect()函數(shù)比php原函數(shù)array_intersect()快五倍
/**
*
* 自定義的array_intersect
* 如果求的是一維數(shù)組的交集這個(gè)函數(shù)比系統(tǒng)的array_intersect快5倍
*
* @param array $arr1
* @param array $arr2
* @author LIUBOTAO 2010-12-13上午11:40:20
*
*/
function my_array_intersect($arr1,$arr2)
{
for($i=0;$i<sizeof($arr1);$i++)
{
$temp[]=$arr1[$i];
}
for($i=0;$i<sizeof($arr1);$i++)
{
$temp[]=$arr2[$i];
}
sort($temp);
$get=array();
for($i=0;$i<sizeof($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/>";
array_diff — 計(jì)算數(shù)組的差集
array array_diff ( array $array1 , array $array2 [, array $ ... ] )
array_diff() 返回一個(gè)數(shù)組,該數(shù)組包括了所有在 array1 中但是不在任何其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
#1 array_diff() 例子
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>
在 $array1 中多次出現(xiàn)的值一樣處理,輸出結(jié)果為:
Array
(
[1] => blue
)
Note: 兩個(gè)單元僅在 (string) $elem1 === (string) $elem2 時(shí)被認(rèn)為是相同的。也就是說(shuō),當(dāng)字符串的表達(dá)是一樣的時(shí)候。
Note: 注意本函數(shù)只檢查了多維數(shù)組中的一維。當(dāng)然可以用 array_diff($array1[0], $array2[0]); 檢查更深的維度。
前面要比后者快,在大數(shù)組中更為明顯。
1.array_intersect函數(shù)
array array_intersect ( array $array1 , array $array2 [, array $ ... ] )
array_intersect() 返回一個(gè)數(shù)組,該數(shù)組包含了所有在 array1 中也同時(shí)出現(xiàn)在所有其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
#1 array_intersect() 例子
復(fù)制代碼 代碼如下:
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
?>
這使得 $result 成為:
Array
(
[a] => green
[0] => red
)
2.自我實(shí)現(xiàn)的array_intersect()函數(shù)比php原函數(shù)array_intersect()快五倍
復(fù)制代碼 代碼如下:
/**
*
* 自定義的array_intersect
* 如果求的是一維數(shù)組的交集這個(gè)函數(shù)比系統(tǒng)的array_intersect快5倍
*
* @param array $arr1
* @param array $arr2
* @author LIUBOTAO 2010-12-13上午11:40:20
*
*/
function my_array_intersect($arr1,$arr2)
{
for($i=0;$i<sizeof($arr1);$i++)
{
$temp[]=$arr1[$i];
}
for($i=0;$i<sizeof($arr1);$i++)
{
$temp[]=$arr2[$i];
}
sort($temp);
$get=array();
for($i=0;$i<sizeof($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/>";
array_diff — 計(jì)算數(shù)組的差集
array array_diff ( array $array1 , array $array2 [, array $ ... ] )
array_diff() 返回一個(gè)數(shù)組,該數(shù)組包括了所有在 array1 中但是不在任何其它參數(shù)數(shù)組中的值。注意鍵名保留不變。
#1 array_diff() 例子
復(fù)制代碼 代碼如下:
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>
在 $array1 中多次出現(xiàn)的值一樣處理,輸出結(jié)果為:
復(fù)制代碼 代碼如下:
Array
(
[1] => blue
)
Note: 兩個(gè)單元僅在 (string) $elem1 === (string) $elem2 時(shí)被認(rèn)為是相同的。也就是說(shuō),當(dāng)字符串的表達(dá)是一樣的時(shí)候。
Note: 注意本函數(shù)只檢查了多維數(shù)組中的一維。當(dāng)然可以用 array_diff($array1[0], $array2[0]); 檢查更深的維度。
您可能感興趣的文章:
- php natsort內(nèi)核函數(shù)淺析
- php in_array 函數(shù)使用說(shuō)明與in_array需要注意的地方說(shuō)明
- PHP數(shù)組的交集array_intersect(),array_intersect_assoc(),array_inter_key()函數(shù)的小問(wèn)題
- PHP內(nèi)核介紹及擴(kuò)展開發(fā)指南—基礎(chǔ)知識(shí)
- php數(shù)組函數(shù)序列之in_array() 查找數(shù)組值是否存在
- php數(shù)組函數(shù)序列之a(chǎn)rray_combine() - 數(shù)組合并函數(shù)使用說(shuō)明
- php數(shù)組函數(shù)序列之in_array() - 查找數(shù)組中是否存在指定值
- php數(shù)組函數(shù)序列之a(chǎn)rray_intersect() 返回兩個(gè)或多個(gè)數(shù)組的交集數(shù)組
- 使用js判斷數(shù)組中是否包含某一元素(類似于php中的in_array())
- PHP內(nèi)核探索:變量存儲(chǔ)與類型使用說(shuō)明
- PHP內(nèi)核探索:變量概述
- php內(nèi)核解析:PHP中的哈希表
- 2個(gè)自定義的PHP in_array 函數(shù),解決大量數(shù)據(jù)判斷in_array的效率問(wèn)題
- php數(shù)組查找函數(shù)in_array()、array_search()、array_key_exists()使用實(shí)例
- PHP函數(shù)in_array()使用詳解
- php提示W(wǎng)arning:mysql_fetch_array() expects的解決方法
- PHP內(nèi)核探索:哈希表碰撞攻擊原理
- 深入理解PHP內(nèi)核(一)
- 深入理解PHP內(nèi)核(二)之SAPI探究
- 深入php內(nèi)核之php in array
相關(guān)文章
php跨域檢測(cè)類允許部分域名訪問(wèn)的示例詳解
PHP跨域檢測(cè)類是一種封裝了跨域檢測(cè)邏輯的PHP類,它可以用于在PHP應(yīng)用程序中檢測(cè)和處理跨域請(qǐng)求,以確保安全和正常的跨域通信,本文給出了示例給大家介紹php如何允許部分域名訪問(wèn),需要的朋友可以參考下2023-12-12php中分頁(yè)及SqlHelper類用法實(shí)例
這篇文章主要介紹了php中分頁(yè)及SqlHelper類用法,結(jié)合實(shí)例形式分析了php數(shù)據(jù)庫(kù)查詢類與分頁(yè)類的定義與具體使用技巧,需要的朋友可以參考下2017-01-01php實(shí)現(xiàn)三級(jí)級(jí)聯(lián)下拉框
這篇文章主要介紹了php實(shí)現(xiàn)三級(jí)級(jí)聯(lián)下拉框,上網(wǎng)翻找了許多三級(jí)級(jí)聯(lián)下拉框?qū)崿F(xiàn)的資料,下面分享給大家2016-04-04