亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取數組中存在值的最小和最大位置

獲取數組中存在值的最小和最大位置

PHP
慕標琳琳 2021-08-27 09:23:01
我需要在存在某個值的數組中找到最小和最大位置!在循環內使用循環來比較值不是一種選擇(我的數組有 100.000 個值)例如=$myarray[0]="red";$myarray[1]="red";$myarray[2]="blue";$myarray[3]="blue";$myarray[4]="blue";$myarray[5]="red";如何獲得藍色存在的最小和最大位置?
查看完整描述

3 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

使用第二個參數array_keys:


if($blue = array_keys($myarray, 'blue')) {

    $min = min($blue);

    $max = max($blue);

}


查看完整回答
反對 回復 2021-08-27
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

可能這就是答案?


function getMinKey($arr, $search){

    if(!in_array($search, $arr)){

        return false;

    }


    foreach($arr as $key => $value){

        if($value == $search){

            return $key;

        }

    }

}


function getMaxKey($arr, $search){

    if(!in_array($search, $arr)){

        return false;

    }


    $arrCount = count($arr)-1;

    for($i = $arrCount; $i >=0; $i--){

        if($arr[$i] == $search){

            return $i;

        }

    }

}


查看完整回答
反對 回復 2021-08-27
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

到目前為止,所有解決方案都搜索了整個數組,這可能效率很低。您只需要從頭搜索到第一個“藍色”,從末尾搜索到最后一個“藍色”。像這樣:


$find  = "blue";

$first = false;

$last  = false;


$max = count($myarray);

$key = 0;

while ($key < $max) {

    if ($myarray[$key] == $find) {

        $first = $key;

        break;

    }

    $key++;

}

if ($first !== false) {

    $key = --$max;

    while ($key > 0) {

        if ($myarray[$key] == $find) {

            $last = $key;

            break;

        }

        $key--;

    }

}

請注意,此代碼考慮到不會找到任何內容。在這種情況下,$first并且$last將包含false. 它還檢查是否$first找到了阻止在顯然不需要的情況下對數組進行兩次搜索。


查看完整回答
反對 回復 2021-08-27
  • 3 回答
  • 0 關注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號