$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);
刚看到这一题,就想到了二分查找法, 但是有个问题是,数组元素是可以重复的,还要返回所有重复的值的index,所以,只好在找到匹配值的时候,再做个while了
我写的时候是用javascript 写的,最大限度的避免使用语言的内置函数,加上php和javascript 都属于c like的语言,所以这段代码从javascript改成php 基本就是在变量前面加了个$
javascript 在线运行可以看下面
http://jsbin.com/lazuwexuji/1...