溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP中怎么查找一列有序數(shù)組是否包含某值

發(fā)布時(shí)間:2021-06-30 16:29:23 來(lái)源:億速云 閱讀:107 作者:Leah 欄目:編程語(yǔ)言

本篇文章為大家展示了PHP中怎么查找一列有序數(shù)組是否包含某值,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

問(wèn)題:對(duì)于一列有序數(shù)組,如何判斷給出的一個(gè)值,該值是否存在于數(shù)組。

思路:判斷是否存在,最簡(jiǎn)單是,直接循環(huán)該數(shù)組,對(duì)每一個(gè)值進(jìn)行比較。但是對(duì)于有序數(shù)組來(lái)說(shuō),這樣寫就完全沒(méi)有利用好“有序”這一特點(diǎn)。

所有我們使用到“二分法查找”,

//有序數(shù)組為$arr = array(2,5,66,87,954,1452,5865);//查找值$str = 1452;//我們先定義 三個(gè)參數(shù)$front = 0;//一個(gè)開(kāi)始值下標(biāo)$end = count($arr) - 1;//一個(gè)結(jié)束值下標(biāo)$mid = intval(($front + $end) / 2);//中間值下標(biāo)

1、第一次比較,我們直接判斷查找值str是否等于中間值mid,如果等于 直接返回 true;

2、如果查找值str大于中間值mid,則說(shuō)明查找值str可能在中間值的右邊,即對(duì)開(kāi)始值front需重新賦值 = 中間值mid + 1,結(jié)束值end不用變,依次中間值mid為新的開(kāi)始值 + 結(jié)束值;

3、如果查找值str小于中間值mid,則說(shuō)明查找值str可能在中間值的左邊,即開(kāi)始值不用變,結(jié)束值end需重新賦值 = 中間值 - 1,依次中間值mid為開(kāi)始值 + 新的結(jié)束值;

-----如上,對(duì)于傳入的開(kāi)始值,結(jié)束值,中間值,進(jìn)行比較。一旦開(kāi)始值 大于 結(jié)束值 則說(shuō)明沒(méi)有找到,結(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;//開(kāi)始下標(biāo) $end = count($arr) - 1;//結(jié)束下標(biāo) while($front <= $end){//結(jié)束值 大于 開(kāi)始值 ,反之則退出  $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)

上述內(nèi)容就是PHP中怎么查找一列有序數(shù)組是否包含某值,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI