php 查找數(shù)組元素提高效率的方法詳解
1.php in_array方法說明
PHP查找數(shù)組元素是否存在,一般會(huì)使用in_array方法。
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
參數(shù)說明:
needle
待搜索的值,如果needle是字符串,比較是區(qū)分大小寫的。
haystack
用來(lái)比較的數(shù)組
strict
如果第三個(gè)參數(shù) strict 的值為 TRUE 則 in_array() 函數(shù)還會(huì)檢查 needle 的類型是否和 haystack 中的相同
返回值
如果找到 needle 則返回 TRUE,否則返回 FALSE。
2.in_array查找元素效率
當(dāng)比較的數(shù)組haystack較大時(shí),in_array效率會(huì)很低
例子:使用in_array對(duì)有10萬(wàn)個(gè)元素的數(shù)組進(jìn)行1000次比較
<?php
$arr = array();
// 創(chuàng)建10萬(wàn)個(gè)元素的數(shù)組
for($i=0; $i<100000; $i++){
$arr[] = $i;
}
// 記錄開始時(shí)間
$starttime = getMicrotime();
// 隨機(jī)創(chuàng)建1000個(gè)數(shù)字使用in_array比較
for($j=0; $j<1000; $j++){
$str = mt_rand(1,99999);
in_array($str, $arr);
}
// 記錄結(jié)束時(shí)間
$endtime = getMicrotime();
echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
/**
* 獲取microtime
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>
run time:2003.6449432373ms
使用in_array判斷元素是否存在,在10萬(wàn)個(gè)元素的數(shù)組中比較1000次,運(yùn)行時(shí)間需要約2秒
3.提高查找元素效率方法
我們可以先使用array_flip進(jìn)行鍵值互換,然后使用isset方法來(lái)判斷元素是否存在,這樣可以提高效率。
例子:使用array_flip先進(jìn)行鍵值互換,再使用isset方法判斷,在10萬(wàn)個(gè)元素的數(shù)組中比較1000次
<?php
$arr = array();
// 創(chuàng)建10萬(wàn)個(gè)元素的數(shù)組
for($i=0; $i<100000; $i++){
$arr[] = $i;
}
// 鍵值互換
$arr = array_flip($arr);
// 記錄開始時(shí)間
$starttime = getMicrotime();
// 隨機(jī)創(chuàng)建1000個(gè)數(shù)字使用isset比較
for($j=0; $j<1000; $j++){
$str = mt_rand(1,99999);
isset($arr[$str]);
}
// 記錄結(jié)束時(shí)間
$endtime = getMicrotime();
echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
/**
* 獲取microtime
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>
run time:1.2781620025635ms
使用array_flip與isset判斷元素是否存在,在10萬(wàn)個(gè)元素的數(shù)組中比較1000次,運(yùn)行時(shí)間需要約1.2毫秒
因此,對(duì)于大數(shù)組進(jìn)行比較,使用array_flip與isset方法會(huì)比in_array效率高很多。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
php獲取后臺(tái)Job管理的實(shí)現(xiàn)代碼
從數(shù)據(jù)庫(kù)中取出job 隊(duì)列 創(chuàng)建新的進(jìn)程進(jìn)行執(zhí)行 等待job 結(jié)束2011-06-06
關(guān)于mysql字符集設(shè)置了character_set_client=binary 在gbk情況下會(huì)出現(xiàn)表描述是亂碼的情況
今天在處理bug的時(shí)候,又發(fā)現(xiàn)一個(gè)奇怪的問題,在設(shè)置mysql的編碼為gbk的情況下,發(fā)現(xiàn)建立出來(lái)的表,凡是表結(jié)構(gòu)無(wú)論是字段還是表結(jié)構(gòu)描述是中文的時(shí)候,建立出來(lái)的表結(jié)構(gòu)描述是亂碼,經(jīng)過排查原來(lái)是character_set_client=binary惹的禍2013-01-01
apache2.2.4+mysql5.0.77+php5.2.8安裝精簡(jiǎn)
linux下apache php環(huán)境的配置方法。2009-04-04
php利用scws實(shí)現(xiàn)mysql全文搜索功能的方法
這篇文章主要介紹了php利用scws實(shí)現(xiàn)mysql全文搜索功能的方法,可通過scws分詞插件的擴(kuò)展來(lái)實(shí)現(xiàn)MySQL全文搜索功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12
PHP文件讀寫操作相關(guān)函數(shù)總結(jié)
這篇文章主要介紹了PHP文件讀寫操作相關(guān)函數(shù)總結(jié),本文總結(jié)了fwrite()、fread()、fgets()、fgetc()、file()、readfile() 等函數(shù)的介紹及使用例子,需要的朋友可以參考下2014-11-11
PHP保存Base64圖片base64_decode的問題整理
在本篇文章里小編給大家整理的是關(guān)于PHP保存Base64圖片base64_decode的問題,需要的朋友們參考下。2019-11-11
php實(shí)現(xiàn)將普通數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù)
在日常的開發(fā)工作中免不了要寫接口,json格式文本的輸出是制作接口必須掌握的,所以本文主要為大家詳細(xì)介紹了php如何將普通數(shù)據(jù)轉(zhuǎn)化為json數(shù)據(jù),需要的可以參考下2023-11-11
完美解決thinkphp唯一索引重復(fù)時(shí)出錯(cuò)的問題
下面小編就為大家?guī)?lái)一篇完美解決thinkphp唯一索引重復(fù)時(shí)出錯(cuò)的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-03-03

