为了账号安全,请及时绑定邮箱和手机立即绑定

获取数组中存在值的最小和最大位置

获取数组中存在值的最小和最大位置

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 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信