Всем привет! Ребята. подскажите, что не так делаю: Вот мой код: Код (Text): $count = count($table); if ($count == 0) { $count = 5; } else { switch ($count) { case $count <= 5: $count = 5; break; case $count >= 20: $count = 20; break; } } В переменной $table массив, считаю количество элементов и, если элементов от 0 до 5, то переменная $count = 5; если элементов от 5 до 20, то $count = количеству элементов; если элементов более 20, то $count = 20. Если убираю оператор if/else, то при 0 элементов $ count приравнивается к 20. Почему то в операторе switch строка case $count <=5 не отрабатывает ноль!? Из-за этого мне пришлось вписать выше оператор if. Помогите разобраться??? За ранее благодарю за ответ!
switch (true) может помочь ))) --- Добавлено --- на самом деле, в любой непонятной ситуации обращайся к официальной документации: https://www.php.net/manual/ru/control-structures.switch
Я не знаю,что вы пытаетесь сделать,что если $count равняется 10? Вот : Код (Text): $count = count($table); if ($count < 5) { $count = 5; } if($count > 20) { $count = 20; } }
Очевидно он пытается сделать вот это: заставить переменную оставаться в заданном "коридоре" значений. PHP: $count = max(5, min(20, $count));
Я остановился на этом варианте: Код (Text): $count = count($table); if ($count > 5 and $count < 20) { $size = $count; } elseif ($count >= 20) { $size = 20; } else { $size = 5; }
Я сделал до этого ответа, переделывать не буду. К тому же, в моем варианте в основном всегда будет первый if работать, а в вашем, я так понимаю, каждый раз будет мусолиться вся формула, тратя на это такты процессора...?
@Атм_Евгений ага, аж устанет работать PHP: <?php $first = microtime(true); $count = rand(0, 30); if ($count > 5 and $count < 20) { $size1 = $count; } elseif ($count >= 20) { $size1 = 20; } else { $size1 = 5; } $size2 = max(5, min(20, $count)); $last = microtime(true); echo $size1 . PHP_EOL; echo $size2 . PHP_EOL; $value = $last - $first; echo "Скрипт выполняется за: ".$value;
Проверил по отдельности, вариант Код (Text): $size=max(5,min(20,$count)); работает медленнее почти всегда, иногда равны показания!
Даже если есть разница в какие-то наносекунды, это не то место где можно реально сэкономить. Куда важнее читабельность.
Почему это не сделать проще, без всяких switch? PHP: if ($count > 20) $count = 20; if ($count < 5) $count = 5;