0

配列があります:

$bounds = array([0]=>array('lower'=>2,'upper'=>5), 
                [1]=>array('lower'=>0,'upper'=>3));

および変数:

$val = 4;

配列$valの「下限」と「上限」の境界で定義された間隔に属しているかどうかを判断できる PHP 関数はありますか? $boundsこの例では、4 は最初の間隔 [2; に属します。5]。したがって、答えは「真」である必要があります。

4

4 に答える 4

3

これを行うための組み込み関数はないと思います。

foreachただし、次のステートメントでそれを行うことができます。

function check_interval($bounds, $val) {
   foreach ($bounds as $array) {
       if($array['lower'] <= $val && $array['upper'] >= $val)
           return true;
   }
   return false;
}
于 2012-09-11T19:56:00.910 に答える
2

私は何も知りません。おそらくコーディングする必要があります。このようなことができます:

function isFromInterval($bounds, $val) {
    foreach ($bounds as $value) {
        if ($val >= $value['lower'] && $val <= $value['upper']) {
            return true;
        }
    }
    return false;
}
于 2012-09-11T19:55:20.930 に答える
2

いいえ。

このような配列のループを作成する必要があります

$val    = 4;
$key_id = FALSE;

foreach($bounds as $key => $data){
    if($val <= $data['upper'] AND $val >= $data['lower']){
        $key_id = $key;
        break;
    }
}

if($key_id !== FALSE){
    //  found something
    //  $bounds[$key_id] is your result in the array
} else {
    // found nothing
}

機能として

function find_range($bounds=array(), $val=0, $return_key=TRUE){
    if(is_array($bounds) === FALSE){
        $bounds = array();
    }

    if(is_numeric($val) === FALSE){
        $val = 0;
    }

    if(is_bool($return_key) === FALSE){
        $return_key = TRUE;
    }

    $key_id = FALSE;

    foreach($bounds as $key => $data){
        if($val < $data['upper'] AND $val > $data['lower']){
            $key_id = $key;
            break;
        }
    }

    if($key_id !== FALSE){
        return ($return_key === TRUE ? $key_id : TRUE);
    } else {
        return FALSE;
    }
}
于 2012-09-11T19:53:12.027 に答える
1

いいえ、できます:

$bounds = array(3=>array('lower'=>2,'upper'=>5), 
                4=>array('lower'=>0,'upper'=>3));

$val = 4;

foreach($bounds as $num => $bound){
    if(max($bound) >= $val && $val >= min($bound)){
        echo $num;
    }
}
于 2012-09-11T19:55:01.300 に答える