Я получаю 3 значения которые могут быть равны low, medium, high каждое. Дальше нужно в зависимости от этих значений вывести число. Всего от 1 до 27. Писать через if не красиво. Выходит что то вродь этого. А как это написать красиво я не пойму.
if ($_GET[smile1] == low){
if ($_GET[smile2] == low){
if($_GET[smile3] == low){
echo "1";
}
}
}
if ($_GET[smile1] == low){
if ($_GET[smile2] == low){
if($_GET[smile3] == medium){
echo "4";
}
}
}
if ($_GET[smile1] == low){
if ($_GET[smile2] == low){
if($_GET[smile3] == high){
echo "7";
}
}
}
$values = array(
"low" => array("low"=>1, "medium"=>2, "high"=>3),
"medium" => array("low"=>4, "medium"=>5, "high"=>6),
"high" => array("low"=>7, "medium"=>8, "high"=>9),
);
$value = $values[$_GET['smile1']][$_GET['smile2']];
аналогично для трех ключей - еще один уровень вложенности. Это точно быстрее вложенных if
-ов и не медленнее, чем switch
.
// Работаем как с троичной системой
$num_value = ['low' => 0, 'medium' => 1, 'high' => 2];
// Разряды. smile1 самый "слабый", младший разряд.
$r1 = $num_value[$_GET['smile1']];
$r2 = $num_value[$_GET['smile2']];
$r3 = $num_value[$_GET['smile3']];
// $r1 * 1 - здесь 1 - это 3 в степени 0
// + 1 - здесь 1 - это для поправки, так как в вопросе счёт с 1, а не 0
$value = $r1 * 1 + $r2 * 3 + $r3 * 3 * 3 + 1;
Как минимум, так
if ($_GET['smile1'] == 'low'){
if($_GET['smile2'] == 'low' && $_GET['smile3'] == 'low'){
echo "1";
}elseif($_GET['smile2'] == 'low'){
if($_GET['smile3'] == 'medium'){
echo "4";
}elseif($_GET['smile3'] == 'high'){
echo "7";
}
}
}
Но можно еще оптимизировать.
Может так подойдет?
if ($_GET[ 'smile1' ] == 'low' && $_GET[ 'smile2' ] == 'low')
if ($_GET[ 'smile3' ] == 'low') echo "1";
elseif ($_GET[ 'smile3' ] == 'medium') echo "4";
elseif ($_GET[ 'smile3' ] == 'high') echo '7';
Еще как вариант
if ($_GET['smile1'] == 'low' && $_GET['smile2'] == 'low') {
switch ($_GET['smile3']) {
case 'low':
echo '1';
break;
case 'medium':
echo '4';
break;
case 'high':
echo '7';
break;
}
}
Троичная система счисления же!
Варианты принимаем как:
(0..2) * 3^0
(0..2) * 3^1
(0..2) * 3^2
Принятые числа суммируем, к результату прибавляем 1
С циклом
// Работаем как с троичной системой
$num_value = ['low' => 0, 'medium' => 1, 'high' => 2];
// Имена ключей GET запроса.
// СНАЧАЛА СТАРШИЙ СМАЙЛ!
$smile_name = ['smile3', 'smile2', 'smile1'];
$value = 0;
foreach($smile_name as $k => $smile){
$r = $num_value[$_GET[$smile]];
$value = $value * 3 + $r;
}
$value += 1;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Можно ли в codeigniter загрузить класс с параметрами? Если да, то как? Я пробовал сделать так, но не работает:
Получаю данные из базы данных, они вносятся в поля - http://istack
Здравствуйте, подскажите есть ли в PHP какая нибудь умная функция, которая принимала бы в качестве базовой даты строку "29 dec 2016" и определяла...