PHP查找一列有序數(shù)組是否包含某值的方法
問題:對(duì)于一列有序數(shù)組,如何判斷給出的一個(gè)值,該值是否存在于數(shù)組。
思路:判斷是否存在,最簡(jiǎn)單是,直接循環(huán)該數(shù)組,對(duì)每一個(gè)值進(jìn)行比較。但是對(duì)于有序數(shù)組來說,這樣寫就完全沒有利用好“有序”這一特點(diǎn)。
所有我們使用到“二分法查找”,
//有序數(shù)組為 $arr = array(2,5,66,87,954,1452,5865); //查找值 $str = 1452; //我們先定義 三個(gè)參數(shù) $front = 0;//一個(gè)開始值下標(biāo) $end = count($arr) - 1;//一個(gè)結(jié)束值下標(biāo) $mid = intval(($front + $end) / 2);//中間值下標(biāo)
1、第一次比較,我們直接判斷查找值str是否等于中間值mid,如果等于 直接返回 true;
2、如果查找值str大于中間值mid,則說明查找值str可能在中間值的右邊,即對(duì)開始值front需重新賦值 = 中間值mid + 1,結(jié)束值end不用變,依次中間值mid為新的開始值 + 結(jié)束值;
3、如果查找值str小于中間值mid,則說明查找值str可能在中間值的左邊,即開始值不用變,結(jié)束值end需重新賦值 = 中間值 - 1,依次中間值mid為開始值 + 新的結(jié)束值;
-----如上,對(duì)于傳入的開始值,結(jié)束值,中間值,進(jìn)行比較。一旦開始值 大于 結(jié)束值 則說明沒有找到,結(jié)束查詢,反之等于就返回已找到。
具體代碼如下:
$str = 89;//查找值
$arr = [1,55,66,89,420];//有序數(shù)組
$ren = find($arr, $str);
echo '<pre>';
var_dump($ren);
function find($arr, $str){
$front = 0;//開始下標(biāo)
$end = count($arr) - 1;//結(jié)束下標(biāo)
while($front <= $end){//結(jié)束值 大于 開始值 ,反之則退出
$mid = intval(($front + $end) / 2);//中間值下標(biāo)
if($str == $arr[$mid]){
return $mid;//存在直接返回值的下標(biāo)
}
if($str > $arr[$mid]){
$front = $mid + 1;//在前面
}
if($str < $arr[$mid]){
$end = $mid - 1;//在后面
}
}
return false;
}
返回結(jié)果:89為第四個(gè)元素值下標(biāo)3
int(3)
以上就是PHP查找一列有序數(shù)組是否包含某值(二分查找)的詳細(xì)內(nèi)容,如果有任何補(bǔ)充可以聯(lián)系腳本之家小編。
- PHP數(shù)組基本用法與知識(shí)點(diǎn)總結(jié)
- PHP 數(shù)組操作詳解【遍歷、指針、函數(shù)等】
- php數(shù)組指針函數(shù)功能及用法示例
- php數(shù)組函數(shù)array_push()、array_pop()及array_shift()簡(jiǎn)單用法示例
- PHP字符串與數(shù)組處理函數(shù)用法小結(jié)
- PHP實(shí)現(xiàn)二維數(shù)組(或多維數(shù)組)轉(zhuǎn)換成一維數(shù)組的常見方法總結(jié)
- PHP實(shí)現(xiàn)提取多維數(shù)組指定一列的方法總結(jié)
- php實(shí)現(xiàn)快速對(duì)二維數(shù)組某一列進(jìn)行組裝的方法小結(jié)
- PHP數(shù)組對(duì)象與Json轉(zhuǎn)換操作實(shí)例分析
- 如何在PHP中使用數(shù)組
相關(guān)文章
ezSQL PHP數(shù)據(jù)庫(kù)操作類庫(kù)
WordPress 使用的數(shù)據(jù)庫(kù)操作類就是它 -- ezSQL 我用了好多年了,我特別喜歡它的幾個(gè)類方法,可以有效提高代碼簡(jiǎn)潔度。2010-05-05
php自動(dòng)提交表單的方法(基于fsockopen與curl)
這篇文章主要介紹了php自動(dòng)提交表單的方法,結(jié)合實(shí)例形式分析了php基于fsockopen與curl兩種實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-05-05
Thinkphp框架開發(fā)移動(dòng)端接口(2)
這篇文章主要介紹了thinkphp框架開發(fā)移動(dòng)端接口的第2種方法,實(shí)現(xiàn)移動(dòng)端訪問自動(dòng)切換移動(dòng)主題模板,從而實(shí)現(xiàn)偽app訪問,感興趣的小伙伴們可以參考一下2016-08-08
PHP批量獲取網(wǎng)頁(yè)中所有固定種子鏈接的方法
這篇文章主要介紹了PHP批量獲取網(wǎng)頁(yè)中所有固定種子鏈接的方法,涉及php字符串與文件操作的相關(guān)技巧,需要的朋友可以參考下2016-11-11

