-1

数値が格納された配列があります。このような:

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

$result0 ~ 100 の動的な値を与えるという変数があります。

例えば:

  • $resultが 33 以上かつ 66 未満の場合、返されるキーは 1 になります。
  • $resultが 66 以上かつ 99 未満の場合、返されるキーは 2 になります。
  • $resultが 99 以上の場合、返されるキーは 3 になります。

これをどのように達成できるかについてのアイデアはありますか?

4

3 に答える 3

1

これにどのようにアプローチするかは、条件付きロジックをどの程度動的にするかによって部分的に異なります。この値の配列を単純にチェックする場合は、いくつかのifandelse ifステートメントのシーケンスを設定するのは簡単です。

ただし、これをもう少し動的にしたい場合は、入力を少し再配置することから始めてください。行ったように配列を整理すると、さまざまな制限値が混乱します。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;
    }
}
于 2013-09-30T16:15:28.320 に答える
1

あなたの条件のために

  1. 33 <= 結果 < 66 の場合、getRangeIndex = 1
  2. 66 <= 結果 < 99 の場合、getRangeIndex = 2
  3. 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";
}
于 2013-09-30T16:10:33.797 に答える
0

範囲が常に整っている場合は、下限を確認する必要がないため、次のようなものが機能します。

$resndx= 0;
foreach($ranges as $key=>$value) {
    if ($value > $result) {
        break;
    }
    $resndx= $key;
}

echo "Result $result is in $resndx";
于 2013-09-30T16:13:19.603 に答える