php在数组范围内查找值

时间:2014-05-06 14:45:13

标签: php arrays range

我有以下数组:

$groupA= array(1,10);
$groupB = array(11,20);
$groupC = array(21,30);

用户可以在文本框中输入任何数值,例如" 5"现在我需要显示该号码组所在的用户。我以这种方式做到了这一点:

然后做一个像这样的开关案例:

switch ($input){
    case ($input>= $groupA[0] && $input<= $groupA[1]):
        echo "You are in Group A.";
    break;
    case ($input>= $groupB[0] && $input<= $groupB[1]):
        echo "You are in Group B.";
    break;

但是,这似乎不可行,因为我们有很多组(可能超过200个)并且使用这么多的开关案例是无效的。

关于如何更优雅地解决这个问题的任何想法?

3 个答案:

答案 0 :(得分:6)

我要制作一个数组:

$groups = array();

$groups['groupA'] = array('min'=>1,'max'=>100);
$groups['groupB'] = array('min'=>1,'max'=>100);

然后

foreach($groups as $label => $group)
{
    if($input >= $group['min'] && $input <= $group['max'])
    {
        echo "You are in group $label";
        break;
    }
}

或者您可以将它们放在数据库中

答案 1 :(得分:0)

如果您将数组存储在数组$groups中,例如,您可以使用以下循环,然后在找到正确的组时中断:

foreach($groups as $i => $group) {
    if ($input >= $group[0] && $input < $group[1]) {
        printf("You are in group %d", $i);
        break;
    }
}

答案 2 :(得分:0)

更快的方法是创建一个查找数组,其中用户输入是组标签的关键:

 $lookup = array( 1 => 'group A',
                  2 => 'group A',
                 //..
                 10 => 'group B' //, ...
                );

 echo 'you are in ' . $lookup[$input];

当然,查找数组会相当大(主要针对我们人类,而不是服务器)。 如果您的输入值中有一个模式(在您的示例中,它似乎是10秒的范围),您可以将哈希计算为键:

 $lookup = array( 0 => 'group A',
                  1 => 'group B' //,....
                );
 $hash = floor($input / 10);

 echo 'you are in ' . $lookup[$hash];