猿问

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

我需要在存在某个值的数组中找到最小和最大位置!在循环内使用循环来比较值不是一种选择(我的数组有 100.000 个值)


例如=


$myarray[0]="red";

$myarray[1]="red";

$myarray[2]="blue";

$myarray[3]="blue";

$myarray[4]="blue";

$myarray[5]="red";

如何获得蓝色存在的最小和最大位置?


慕标琳琳
浏览 163回答 3
3回答

呼如林

使用第二个参数array_keys:if($blue = array_keys($myarray, 'blue')) {    $min = min($blue);    $max = max($blue);}

红糖糍粑

可能这就是答案?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;        }    }}

浮云间

到目前为止,所有解决方案都搜索了整个数组,这可能效率很低。您只需要从头搜索到第一个“蓝色”,从末尾搜索到最后一个“蓝色”。像这样:$find&nbsp; = "blue";$first = false;$last&nbsp; = false;$max = count($myarray);$key = 0;while ($key < $max) {&nbsp; &nbsp; if ($myarray[$key] == $find) {&nbsp; &nbsp; &nbsp; &nbsp; $first = $key;&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }&nbsp; &nbsp; $key++;}if ($first !== false) {&nbsp; &nbsp; $key = --$max;&nbsp; &nbsp; while ($key > 0) {&nbsp; &nbsp; &nbsp; &nbsp; if ($myarray[$key] == $find) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $last = $key;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $key--;&nbsp; &nbsp; }}请注意,此代码考虑到不会找到任何内容。在这种情况下,$first并且$last将包含false. 它还检查是否$first找到了阻止在显然不需要的情况下对数组进行两次搜索。
随时随地看视频慕课网APP
我要回答