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

怎么简化这段代码

怎么简化这段代码

慕后森 2018-09-02 14:14:39
$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);?>


查看完整回答
反对 回复 2018-09-02
?
慕神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);?>


查看完整回答
反对 回复 2018-09-02
  • 2 回答
  • 0 关注
  • 800 浏览
慕课专栏
更多

添加回答

举报

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