我有一个存储了数值的数组。像这样:
$ranges = array(1=> '33', 2=> '66', 3=> '99');
我有一个名为$result
的变量,它给出了0到100之间的动态值。
例如:
$result
等于或大于33且小于66,则返回的密钥应为1 $result
等于或大于66且小于99,则返回的密钥应为2 $result
等于或大于99,则返回的密钥应为3 关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
根据您的条件
这个功能可能是这样的:
function getRangeIndex( $i ) {
$ranges = array(1=> '33', 2=> '66', 3=> '99');
$prevValue = 0;
$prevKey = null;
foreach( $ranges as $currKey=>$currValue ) {
if( $prevValue <= $i && $i < $currValue ) {
return $prevKey;
}
$prevValue = $currValue;
$prevKey = $currKey;
}
return $currKey;
}
测试功能的简单循环:
for( $result = 0 ; $result <= 100 ; $result++ ) {
echo "$result - " . getRangeIndex( $result ) . "\n";
}
答案 1 :(得分:1)
如何处理此问题部分取决于您希望条件逻辑的动态程度。如果您只是检查这个值数组,那么设置几个if
和else if
语句的序列是微不足道的。
但是,如果您希望它更具动态性,那么您应该首先重新排列输入。像你一样组织你的数组时,你会混淆不同的限制值。 33是0
范围的上限,66是1
范围的上限,99是2
范围的上限,100是上限包含1>范围的限制。
一个天真的解决方案是简单地将你的33,66和99值减一,然后遍历列表,对该范围执行3
检查。这意味着32将返回<=
而33将返回0
,但32.5也将返回1
。因此,如果没有任何其他信息,这将为您提供所需的信息:
1
答案 2 :(得分:0)
如果你的范围总是按顺序排列,则不需要检查下限,所以这样的事情会起作用:
$resndx= 0;
foreach($ranges as $key=>$value) {
if ($value > $result) {
break;
}
$resndx= $key;
}
echo "Result $result is in $resndx";