php находит значение в диапазоне массивов
У меня есть следующий массив:
$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 answers
Я бы сделал массив:
$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;
}
}