我有以下数组:
$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个),使用这么多切换例是低效的。
有什么办法更优雅地解决这个问题吗?
我要创建一个数组:
$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;
}
}
或者你可以把它们放到数据库中
一种更快的方法是创建一个查找数组,其中用户输入是组标签的键:
$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];
如果您的数组存储在数组$groups
中,例如,您可以使用以下循环,然后在找到正确的组时中断:
foreach($groups as $i => $group) {
if ($input >= $group[0] && $input < $group[1]) {
printf("You are in group %d", $i);
break;
}
}