$amount = 100; //110,90,200$arr = [98,100,100,120,150,160,183];如上:变量$amount跟$arr进行对比,如果变量在数组中,则返回数组中的下标值;如果变量不在数组中,先检测变量是否在哪两个值(AB)之间,如果在,则返回这AB的下标;如果不在两个值之间,若变量小于数组的第一个值,则返回下标0;若变量大于数组的最后的值,则返回数组长度减一。即:
$amount = 100; 返回 [1,2];
$amount = 110; 返回 [2,3];
$amount = 90; 返回 [0];
$amount = 200; 返回 [6];下面是我写的代码,求精简。$key = []; //下标值的数组$count = count($arr) - 1;foreach($arr as $k => $v){ if($amount == $v){
$key[] = $k;
}
}if(empty($key)){ foreach($arr as $k => $v){ if($amount < $arr[0]){
$key[] = ''; break;
}
}
}if(empty($key)){ foreach($arr as $k => $v){ if($amount > $arr[$count]){
$key[] = $count; break;
}
}
}if(empty($key)){ foreach($arr as $k => $v){ if($amount >= $arr[$k] && $amount < $arr[$k + 1]){
$key[] = $k;
$key[] = $k + 1;
}
}
}
var_dump($key);
2 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
我这个版本应该是最简化的
<?php$result = [];foreach($arr as $index => $value) { if ($amount < $value) { $result[0] = $index; } else if ($amount === $value) { $result[0] = $index; break; } else { $result[] = $index; break; } } var_dump($result);?>
慕神8447489
TA贡献1780条经验 获得超1个赞
精简后的
<?php$amount = 110; //110,90,200$arr = [98,100,100,120,150,160,183]; $key = []; $arr_length = count($arr);for ($i=0; $i<$arr_length; $i++) { if($amount == $arr[$i] || (empty($key) && $amount > $arr[$i] && $i == $arr_length - 1)){ $key[]=$i; } if(empty($key) && $amount < $arr[$i]) { $i-1>=0 ? array_push($key, $i-1, $i) : $key[]=$i; break; } } var_dump($key);?>
- 2 回答
- 0 关注
- 800 浏览
相关问题推荐
添加回答
举报
0/150
提交
取消