首页 文章

将数值放入数组范围

提问于
浏览
-1

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

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

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

例如:

  • 如果 $result 等于或大于33且小于66,则返回的键应为1

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

  • 如果 $result 等于或大于99,则返回的键应为3

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

3 回答

  • 1

    为了你的条件

    • 当33 <=结果<66时,则getRangeIndex = 1

    • 当66 <=结果<99时,则getRangeIndex = 2

    • 当99 <=结果时,getRangeIndex = 3

    功能可能是这样的:

    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";
    }
    
  • 0

    您如何处理这部分取决于您希望条件逻辑的动态程度 . 如果你're simply checking against this array of values, it'设置几个 ifelse if 语句的序列是微不足道的 .

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

    对此的一个天真的解决方案是简单地将您的33,66和99值向下移动1并迭代列表执行该范围的 <= 检查 . 这意味着32将返回 0 并且33将返回 1 ,但32.5也将返回 1 . 因此,如果没有任何其他信息,这将为您提供所需的信息:

    $ranges = array(0 => 33, 1 => 66, 2 => 99, 3 => 101);
    
    foreach ($ranges as $key => $value)
    {
        if ($result < $value)
        {
            $best = $key;
            break;
        }
    }
    
  • 1

    如果您的范围始终是有序的,则无需检查下限,因此这样的方法可行:

    $resndx= 0;
    foreach($ranges as $key=>$value) {
        if ($value > $result) {
            break;
        }
        $resndx= $key;
    }
    
    echo "Result $result is in $resndx";
    

相关问题