将数值放入数组范围

时间:2013-09-30 15:51:45

标签: php arrays

我有一个存储了数值的数组。像这样:

$ranges = array(1=> '33', 2=> '66', 3=> '99');

我有一个名为$result的变量,它给出了0到100之间的动态值。

例如:

  • 如果$result等于或大于33且小于66,则返回的密钥应为1
  • 如果$result等于或大于66且小于99,则返回的密钥应为2
  • 如果$result等于或大于99,则返回的密钥应为3

关于如何实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:1)

根据您的条件

  1. 当33< =结果< 66然后getRangeIndex = 1
  2. 当66< =结果< 99然后getRangeIndex = 2
  3. 当99< =结果然后getRangeIndex = 3
  4. 这个功能可能是这样的:

    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)

如何处理此问题部分取决于您希望条件逻辑的动态程度。如果您只是检查这个值数组,那么设置几个ifelse if语句的序列是微不足道的。

但是,如果您希望它更具动态性,那么您应该首先重新排列输入。像你一样组织你的数组时,你会混淆不同的限制值。 33是0范围的上限,66是1范围的上限,99是2范围的上限,100是上限包含范围的限制。

一个天真的解决方案是简单地将你的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";