我需要在存在某些值的数组中找到最小和最大位置! 在一个循环中使用一个循环比较值不是一个选择(我的数组有100.000个值)
e.g =
$myarray[0]="red";
$myarray[1]="red";
$myarray[2]="blue";
$myarray[3]="blue";
$myarray[4]="blue";
$myarray[5]="red";
如何获取蓝色存在的最小和最大位置?
答案 0 :(得分:1)
将第二个参数用于array_keys
:
if($blue = array_keys($myarray, 'blue')) {
$min = min($blue);
$max = max($blue);
}
答案 1 :(得分:0)
您可以将array_keys与search_value一起使用,以提取所有匹配的键,然后分别使用max和min来获取想要的两个键。
$keys = array_keys($myarray,'blue'); //[2,3,4]
$maxKey = max($keys); //4
$minKey = min($keys); //2
我必须建议明智的选择执行for循环会更好:
$length = count($myarray);
$minKey = FALSE;
$maxKey = FALSE;
$search = 'blue';
for($i=0;$i<$length;$i++){
if($myarray[$i] == $search){
if($minKey === FALSE) $minKey = $i;
$maxKey = $i;
}
}
答案 2 :(得分:0)
这可能是答案吗?
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;
}
}
}
答案 3 :(得分:0)
到目前为止,所有解决方案都搜索了整个数组,这可能效率很低。您只需要从头开始搜索到第一个“蓝色”,然后从头到尾搜索到最后一个“蓝色”。像这样:
$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
可以防止在不必要的情况下两次不搜索数组。