學(xué)習(xí)PHP查找一列有序數(shù)組是否包含某值的方法

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

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),贛州企業(yè)網(wǎng)站建設(shè),贛州品牌網(wǎng)站建設(shè),網(wǎng)站定制,贛州網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,贛州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

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

相關(guān)學(xué)習(xí)推薦:php編程(視頻)

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

//有序數(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可能在中間值的右邊,即對開始值front需重新賦值 = 中間值mid + 1,結(jié)束值end不用變,依次中間值mid為新的開始值 + 結(jié)束值;

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

-----如上,對于傳入的開始值,結(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)

相關(guān)學(xué)習(xí)推薦:編程視頻

當(dāng)前文章:學(xué)習(xí)PHP查找一列有序數(shù)組是否包含某值的方法
文章地址:http://muchs.cn/article30/cjjgso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)公司域名注冊、Google、品牌網(wǎng)站設(shè)計(jì)、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)