Более подробная информация здесь, в том числе: Чтобы определить нечетное или четное, это быстрее и эффективнее использовать побитовый оператор :&$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
ashleedawg
Ответы:
558
Вы были правы, думая, что мод - хорошее место для начала. Вот выражение, которое будет возвращать true, если $numberчетное, false, если нечетное:
Если вы используете это в циклах или больших количествах, вы можете рассмотреть проверку битов, предложенную Arius2038, которая очень быстрая. Бит-чек - мой предпочтительный метод для нечетных / четных проверок.
Мартейн
Работает нормально, но мне просто интересно, какая логика стоит за этим? Почему задано значение true, если "10 == 0"?
Snlan
Логика в том, что любое четное число делится на 2 без остатка. Если бы вы использовали $ number% 10, а ваш $ number был 20, он вернул бы true, но не если бы ваш $ number был 22. Вы могли бы использовать $ number% 10, если вы пытались найти каждый 10-й элемент в цикле, например ,
crdunst
1
@ Время, если 5% 2 = 1. Логика 2 * 2 + 1 = 5. Как получить 2 в php?
Хендри Танака
1
@Hendry - что ты спрашиваешь? Как получить частное для деления на целое число или ...? Если это то, что вы имеете в виду, вам просто нужно получить floor () результат; пол (5/2) = 2
Это определенно будет самый быстрый способ при использовании целых чисел в языке, подобном C, с большим отрывом. Кто-нибудь делал тесты, чтобы определить, верно ли это и для PHP?
Томасруттер
1
Вероятно, это самый быстрый способ, если PHP-движок был хорошо закодирован.
Рольф
Я бы сказал, что это самый быстрый и прямой путь. Отлично.
Я полагаю, что это побитовый оператор, если вы не знаете, что вы делаете с этой фантазией, я бы избежал этого синтаксиса.
danhere 12.12.13
1
Я должен восхищаться синтаксисом, вещи, которые работают, не зная почему, дают вам напоминание о том, насколько мы малы в мире физики, математики и, ну, просто добавим строку под номером 1, а не 2 ...
Джонас Лундман
Я использую побитовые операторы в JS совсем немного. Например if (~string.indexOf("@")) {}вместо if (string.indexOf("@") !== -1) {}. Я предпочитаю, чтобы условия приводили к простому истинному или ложному. Но да, это может немного смущать людей, которые не знакомы с этим синтаксисом.
Мартин Джеймс
7
Другой вариант - проверить, является ли последняя цифра четным числом:
$value ="1024";// A Number
$even = array(0,2,4,6,8);if(in_array(substr($value,-1),$even)){// Even Number}else{// Odd Number}
Или, чтобы сделать это быстрее, используйте isset()вместо array_search:
$value ="1024";// A Number
$even = array(0=>1,2=>1,4=>1,6=>1,8=>1);if(isset($even[substr($value,-1)]){// Even Number}else{// Odd Number}
To Downvoter: Могу ли я узнать, почему вы проголосовали?
Субин
4
Это очень дорого по сравнению с другими методами.
grantwparks
@grantwparks Ну, разница между использованием isset & mod составляет всего 0.5007 секунд. Но array_search очень дорогой.
Субин
2
@grantwparks Я обновил код, чтобы включить, in_arrayкоторый иногда опережает мод оператора.
Субин
1
Интересный способ мышления, хотя. Это в основном десятичная версия $num & 1:). Вы также можете сделать это в шестнадцатеричном виде: массив (0, 2, 4, 6, 8, A, C, E, F): D.
Matthijs Wessels
5
Я провел небольшое тестирование и обнаружил, что между mod is_intи &-operator, mod - самый быстрый, за ним следует & -оператор.
is_intпочти в 4 раза медленнее, чем мод.
//for numbers n [0,1,2,3,4....]if((n+2)%2==1){//odd}else{//even}
Ноль - это четное число. Другими словами, его четность - качество целого числа, являющегося четным или нечетным, - четна. Самый простой способ доказать, что ноль является четным, состоит в том, чтобы проверить, что он соответствует определению «четного»: это целое число, кратное 2, в частности, 0 × 2. В результате ноль разделяет все свойства, которые характеризуют четные числа: делится на 2, 0 окружен с обеих сторон нечетными числами, 0 является суммой целого числа (0) с самим собой, а набор из 0 объектов может быть разбит на два равных набора. с http://en.wikipedia.org/wiki/Parity_of_zero
Я не понимаю Почему (n + 2)% 2? В каких случаях он возвращает что-то отличное от n% 2?
Пьер-Оливье Варес
2
Этот код проверяет, является ли число нечетным или четным в PHP. В примере $aесть 2и вы получите четное число. Если вам нужен нечетный, измените $aзначение
$a=2;if($a %2==0){
echo "<h3>This Number is <b>$a</b> Even</h3>";}else{
echo "<h3>This Number is <b>$a</b> Odd</h3>";}
PHP автоматически преобразует ноль и пустую строку в ноль. Это происходит и по модулю. Для этого будет код
$number %2==0or!($number &1)
со значением $ number = '' или $ number = null, результат равен true. Я проверяю это для чего-то более расширенного:
function testEven($pArg){if(is_int($pArg)===true){
$p =($pArg %2);if($p==0){print"The input '".$pArg."' is even.<br>";}else{print"The input '".$pArg."' is odd.<br>";}}else{print"The input '".$pArg."' is not a number.<br>";}}Theprintis there for testing purposes, hence in practice it becomes:function testEven($pArg){if(is_int($pArg)===true){return $pArg%2;}returnfalse;}
Эта функция возвращает 1 для любого нечетного числа, 0 для любого четного числа и false, если это не число. Я всегда пишу === true или === false, чтобы позволить себе (и другим программистам) знать, что тест соответствует назначению.
<!DOCTYPE html><html><head><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><title>Check Even Or Odd Number Without Use Condition And Loop Statement.</title></head><body><h4>Check Even Or Odd Number Without Use Condition And Loop Statement.</h4><table><tr><th>Enter A Number :</th><td><inputtype="text"name="num_even_odd"id="num_even_odd"placeholder="Enter Only Number"></td></tr><tr><th>Your Answer Is :</th><tdid="ans_even_odd"style="font-size:15px;color:gray;font-weight:900;"></td></tr><tr><td><inputtype="button"name="btn_even_odd"id="btn_even_odd"value="submit"></td></tr></table></body></html>
Я предполагаю, что счетчик уже установлен. в $ i, который увеличивается в конце цикла, это работает для меня, используя сокращенный запрос.
$row_pos =($i &1)?'odd':'even';
Итак, что же это делает, он запрашивает утверждение, которое мы делаем по существу, $ i нечетно, в зависимости от того, будет ли его значение true или false решать, что будет возвращено. Возвращаемое значение заполняет нашу переменную $ row_pos
Я использую это, чтобы поместить его в цикл foreach, прямо перед тем, как он мне понадобится. Это делает его очень эффективным, чтобы дать мне соответствующие имена классов, потому что у меня уже есть счетчик для идентификаторов, чтобы использовать позже в программе. Это краткий пример того, как я буду использовать эту часть.
<divclass='row-{$row_pos}'> random data <div>
Это дает мне нечетные и четные классы в каждой строке, поэтому я могу использовать правильный класс и чередовать результаты печати по странице.
Полный пример того, что я использую, отмечает, что к идентификатору применен счетчик, а к классу применен мой нечетный / четный результат:
Предупреждение: по некоторым причинам это условие не оценивается как TRUE в объявлении цикла for , как показано ниже:
В начале каждой итерации expr2оценивается. Если значение равно TRUE, цикл продолжается и выполняются вложенные операторы. Если он оценивается как FALSE, выполнение цикла заканчивается.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Ответы:
Вы были правы, думая, что мод - хорошее место для начала. Вот выражение, которое будет возвращать true, если
$number
четное, false, если нечетное:Работает для каждого целочисленного значения PHP , см. Также Арифметические операторы PHP .
Пример:
Вывод:
источник
Другой вариант - простая проверка битов.
например:
источник
Да, используя мод
источник
Хотя все ответы являются хорошими и правильными, простое решение в одной строке:
либо:
или:
работает очень хорошо.
источник
или
источник
if (~string.indexOf("@")) {}
вместоif (string.indexOf("@") !== -1) {}
. Я предпочитаю, чтобы условия приводили к простому истинному или ложному. Но да, это может немного смущать людей, которые не знакомы с этим синтаксисом.Другой вариант - проверить, является ли последняя цифра четным числом:
Или, чтобы сделать это быстрее, используйте
isset()
вместоarray_search
:Или сделать это быстрее ( бьет
mod operator
в разы ):Вот проверка времени как доказательство моих выводов.
источник
in_array
который иногда опережает мод оператора.$num & 1
:). Вы также можете сделать это в шестнадцатеричном виде: массив (0, 2, 4, 6, 8, A, C, E, F): D.Я провел небольшое тестирование и обнаружил, что между mod
is_int
и&
-operator, mod - самый быстрый, за ним следует & -оператор.is_int
почти в 4 раза медленнее, чем мод.Я использовал следующий код для тестирования:
Результаты, которые я получил, были довольно последовательными. Вот пример:
источник
Все четные числа, разделенные на 2, приведут к целому числу
источник
Ноль - это четное число. Другими словами, его четность - качество целого числа, являющегося четным или нечетным, - четна. Самый простой способ доказать, что ноль является четным, состоит в том, чтобы проверить, что он соответствует определению «четного»: это целое число, кратное 2, в частности, 0 × 2. В результате ноль разделяет все свойства, которые характеризуют четные числа: делится на 2, 0 окружен с обеих сторон нечетными числами, 0 является суммой целого числа (0) с самим собой, а набор из 0 объектов может быть разбит на два равных набора. с http://en.wikipedia.org/wiki/Parity_of_zero
источник
Этот код проверяет, является ли число нечетным или четным в PHP. В примере
$a
есть2
и вы получите четное число. Если вам нужен нечетный, измените$a
значениеисточник
PHP автоматически преобразует ноль и пустую строку в ноль. Это происходит и по модулю. Для этого будет код
со значением $ number = '' или $ number = null, результат равен true. Я проверяю это для чего-то более расширенного:
Эта функция возвращает 1 для любого нечетного числа, 0 для любого четного числа и false, если это не число. Я всегда пишу === true или === false, чтобы позволить себе (и другим программистам) знать, что тест соответствует назначению.
источник
Эта работа для меня ..!
источник
Я предполагаю, что счетчик уже установлен. в $ i, который увеличивается в конце цикла, это работает для меня, используя сокращенный запрос.
Итак, что же это делает, он запрашивает утверждение, которое мы делаем по существу, $ i нечетно, в зависимости от того, будет ли его значение true или false решать, что будет возвращено. Возвращаемое значение заполняет нашу переменную $ row_pos
Я использую это, чтобы поместить его в цикл foreach, прямо перед тем, как он мне понадобится. Это делает его очень эффективным, чтобы дать мне соответствующие имена классов, потому что у меня уже есть счетчик для идентификаторов, чтобы использовать позже в программе. Это краткий пример того, как я буду использовать эту часть.
Это дает мне нечетные и четные классы в каждой строке, поэтому я могу использовать правильный класс и чередовать результаты печати по странице.
Полный пример того, что я использую, отмечает, что к идентификатору применен счетчик, а к классу применен мой нечетный / четный результат:
Таким образом, это дает мне очень простой способ создать красивую таблицу.
источник
Попробуй это,
источник
Предупреждение: по некоторым причинам это условие не оценивается как TRUE в объявлении цикла for , как показано ниже:
Это НЕ работает:
Это НЕ работает:
Это НЕ работает:
Это работает хорошо :
источник
источник
источник
Попробуйте это с полем #Input
источник