Jaki jest najprostszy i najbardziej podstawowy sposób sprawdzenia, czy liczba / zmienna jest nieparzysta, a nawet w PHP? Czy to ma coś wspólnego z modem?
Wypróbowałem kilka skryptów, ale .. google obecnie nie dostarcza.
Więcej informacji tutaj, w tym: Aby określić nieparzyste lub nawet szybsze i bardziej wydajne użycie operatora bitowego :&$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
ashleedawg
Odpowiedzi:
557
Miałeś rację, myśląc, że mod to dobre miejsce na start. Oto wyrażenie, które zwróci true, jeśli $numberjest parzyste, false, jeśli nieparzyste:
Jeśli używasz tego w pętlach lub dużych ilościach, możesz rozważyć kontrolę bitów sugerowaną przez Arius2038, która jest bardzo szybka. Kontrola bitów jest moją preferowaną metodą kontroli nieparzystych / parzystych.
Martijn
Działa dobrze, ale zastanawiam się, jaka jest logika? Dlaczego podano wartość true, jeśli „10 == 0”?
snlan
Logika jest taka, że dowolna liczba parzysta jest podzielna przez 2 bez reszty. Jeśli użyjesz $ numer% 10, a twój numer $ 20, zwróci wartość true, ale nie, jeśli Twój numer $ to 22. Możesz użyć $ numer% 10, jeśli na przykład próbujesz znaleźć co 10. element w pętli .
crdunst
1
@Tim, jeśli 5% 2 = 1. Logika to 2 * 2 + 1 = 5.Jak zdobyć 2 w php?
Hendry Tanaka
1
@Hendry - o co dokładnie pytasz? Jak uzyskać iloraz dzielenia jako liczby całkowitej lub ...? Jeśli o to ci chodzi, po prostu musisz floor () uzyskać wynik; piętro (5/2) = 2
Byłby to zdecydowanie najszybszy sposób przy użyciu liczb całkowitych w języku takim jak C, z dużym marginesem. Czy ktoś zrobił testy porównawcze, aby ustalić, czy dotyczy to również PHP?
thomasrutter,
1
Jest to prawdopodobnie najszybszy sposób, jeśli silnik PHP jest dobrze zakodowany.
Rolf,
Powiedziałbym, że jest to najszybszy i najprostszy sposób. Idealny.
Uważam, że jest to operator bitowy, chyba że wiesz, co robisz z tą fantazją, unikałbym tej składni.
danhere 12.12.13
1
Muszę podziwiać składnię, rzeczy, które działają bez wiedzy dlaczego, przypominają o tym, jak mali jesteśmy w świecie fizyki, matematyki i, no cóż, po prostu dodaj wiersz numer 1, a nie 2 ...
Jonas Lundman
Często używam operatorów bitowych w JS. Na przykład if (~string.indexOf("@")) {}zamiast if (string.indexOf("@") !== -1) {}. Wolę, aby warunki skutkowały prostą prawdą lub fałszem. Ale tak, może to być nieco mylące dla osób, które nie znają tej składni.
Martin James
7
Inną opcją jest sprawdzenie, czy ostatnia cyfra jest liczbą parzystą:
$value ="1024";// A Number
$even = array(0,2,4,6,8);if(in_array(substr($value,-1),$even)){// Even Number}else{// Odd Number}
Lub, aby przyspieszyć, użyj isset()zamiast 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}
Do Downvoter: Czy mogę wiedzieć, dlaczego przegłosowałeś?
Subin
4
Jest bardzo drogi w porównaniu do innych metod.
grantwparks
@grantwparks Cóż, różnica między używaniem isset i mod wynosi tylko 0,5007 sekundy. Ale array_search jest bardzo drogi.
Subin
2
@grantwparks Mam aktualizację kodu, aby uwzględnić in_arrayczasami, który operator modów bije.
Subin
1
Ciekawy sposób myślenia. Jest to w zasadzie wersja dziesiętna $num & 1:). Można to również zrobić szesnastkowo: tablica (0, 2, 4, 6, 8, A, C, E, F): D.
Matthijs Wessels
5
Zrobiłem trochę testów i okazało się, że między modem is_inta &operatorem mod jest najszybszy, a tuż za nim znajduje się & -operator.
is_intjest prawie 4 razy wolniejszy niż mod.
//for numbers n [0,1,2,3,4....]if((n+2)%2==1){//odd}else{//even}
Zero to liczba parzysta. Innymi słowy, jego parzystość - jakość liczby całkowitej równej lub nieparzystej - jest parzysta. Najprostszym sposobem udowodnienia, że zero jest parzyste, jest sprawdzenie, czy pasuje ono do definicji „parzystej”: jest to liczba całkowita wielokrotności 2, a konkretnie 0 × 2. W rezultacie zero dzieli wszystkie właściwości, które charakteryzują liczby parzyste: 0 jest podzielny przez 2, 0 jest otoczony z obu stron liczbami nieparzystymi, 0 jest sumą liczby całkowitej (0) z samym sobą, a zbiór 0 obiektów można podzielić na dwa równe zestawy. z http://en.wikipedia.org/wiki/Parity_of_zero
Nie rozumiem. Dlaczego (n + 2)% 2? W jakich przypadkach zwraca coś innego niż n% 2?
Pierre-Olivier Vares,
2
Ten kod sprawdza, czy liczba jest nieparzysta, czy nawet w PHP. W tym przykładzie $ajest 2i masz parzystą liczbę. Jeśli potrzebujesz wartości nieparzystej, zmień $awartość
$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 automatycznie konwertuje wartość null i pusty ciąg znaków na zero. Tak dzieje się również w przypadku modulo. Do tego będzie kod
$number %2==0or!($number &1)
z wartością $ number = '' lub $ number = null wynikiem jest prawda. Testuję go więc nieco bardziej:
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;}
Ta funkcja zwraca 1 dla dowolnej liczby nieparzystej, 0 dla dowolnej liczby parzystej i fałsz, gdy nie jest liczbą. Zawsze piszę === prawda lub === fałsz, aby dać sobie (i innym programistom) informację, że test jest zgodny z przeznaczeniem.
<!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>
Zakładam, że istnieje już licznik. w $ i, który jest zwiększany na końcu pętli, Działa to dla mnie przy użyciu skróconego zapytania.
$row_pos =($i &1)?'odd':'even';
Więc co to robi, cóż, pyta o to, co robimy, w istocie $ i jest dziwne, w zależności od tego, czy jego prawda, czy fałsz decyduje o tym, co zostanie zwrócone. Zwrócona wartość wypełnia naszą zmienną $ row_pos
Używam tego, aby umieścić go w pętli foreach, tuż przed jego potrzebą. To sprawia, że jest to bardzo wydajny jeden liniowiec, który nadaje mi odpowiednie nazwy klas, ponieważ mam już licznik, z którego id może korzystać później w programie. To jest krótki przykład tego, jak wykorzystam tę część.
<divclass='row-{$row_pos}'> random data <div>
Daje mi to nieparzyste i parzyste klasy w każdym rzędzie, dzięki czemu mogę użyć odpowiedniej klasy i rozłożyć wydrukowane wyniki na stronie.
Pełny przykład tego, czego używam, zwróć uwagę, że identyfikator ma do niego zastosowany licznik, a klasa ma do niego mój wynik nieparzysty / parzysty:
Ostrzeżenie, z niektórych powodów, warunek ten nie ma wartości PRAWDA w deklaracji pętli for , jak pokazano poniżej:
Na początku każdej iteracji expr2jest oceniany. Jeśli ma wartość PRAWDA, pętla jest kontynuowana i wykonywane są instrukcje zagnieżdżone. Jeśli ma wartość FAŁSZ, wykonywanie pętli kończy się.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
Odpowiedzi:
Miałeś rację, myśląc, że mod to dobre miejsce na start. Oto wyrażenie, które zwróci true, jeśli
$number
jest parzyste, false, jeśli nieparzyste:Działa z każdą liczbą całkowitą PHP , zobacz także PHP Operatory arytmetyczne .
Przykład:
Wynik:
źródło
Inną opcją jest proste sprawdzenie bitów.
na przykład:
źródło
Tak, używając mod
źródło
Chociaż wszystkie odpowiedzi są poprawne i poprawne, proste rozwiązanie w jednym wierszu to:
zarówno:
lub:
działa bardzo dobrze.
źródło
lub
źródło
if (~string.indexOf("@")) {}
zamiastif (string.indexOf("@") !== -1) {}
. Wolę, aby warunki skutkowały prostą prawdą lub fałszem. Ale tak, może to być nieco mylące dla osób, które nie znają tej składni.Inną opcją jest sprawdzenie, czy ostatnia cyfra jest liczbą parzystą:
Lub, aby przyspieszyć, użyj
isset()
zamiastarray_search
:Lub, aby przyspieszyć ( czasami bije
mod operator
):Oto próba czasu jako dowód moich ustaleń.
źródło
in_array
czasami, który operator modów bije.$num & 1
:). Można to również zrobić szesnastkowo: tablica (0, 2, 4, 6, 8, A, C, E, F): D.Zrobiłem trochę testów i okazało się, że między modem
is_int
a&
operatorem mod jest najszybszy, a tuż za nim znajduje się & -operator.is_int
jest prawie 4 razy wolniejszy niż mod.Użyłem następującego kodu do celów testowych:
Wyniki, które uzyskałem, były dość spójne. Oto próbka:
źródło
Wszystkie liczby parzyste podzielone przez 2 dadzą liczbę całkowitą
źródło
Zero to liczba parzysta. Innymi słowy, jego parzystość - jakość liczby całkowitej równej lub nieparzystej - jest parzysta. Najprostszym sposobem udowodnienia, że zero jest parzyste, jest sprawdzenie, czy pasuje ono do definicji „parzystej”: jest to liczba całkowita wielokrotności 2, a konkretnie 0 × 2. W rezultacie zero dzieli wszystkie właściwości, które charakteryzują liczby parzyste: 0 jest podzielny przez 2, 0 jest otoczony z obu stron liczbami nieparzystymi, 0 jest sumą liczby całkowitej (0) z samym sobą, a zbiór 0 obiektów można podzielić na dwa równe zestawy. z http://en.wikipedia.org/wiki/Parity_of_zero
źródło
Ten kod sprawdza, czy liczba jest nieparzysta, czy nawet w PHP. W tym przykładzie
$a
jest2
i masz parzystą liczbę. Jeśli potrzebujesz wartości nieparzystej, zmień$a
wartośćźródło
PHP automatycznie konwertuje wartość null i pusty ciąg znaków na zero. Tak dzieje się również w przypadku modulo. Do tego będzie kod
z wartością $ number = '' lub $ number = null wynikiem jest prawda. Testuję go więc nieco bardziej:
Ta funkcja zwraca 1 dla dowolnej liczby nieparzystej, 0 dla dowolnej liczby parzystej i fałsz, gdy nie jest liczbą. Zawsze piszę === prawda lub === fałsz, aby dać sobie (i innym programistom) informację, że test jest zgodny z przeznaczeniem.
źródło
Ta praca dla mnie ..!
źródło
Zakładam, że istnieje już licznik. w $ i, który jest zwiększany na końcu pętli, Działa to dla mnie przy użyciu skróconego zapytania.
Więc co to robi, cóż, pyta o to, co robimy, w istocie $ i jest dziwne, w zależności od tego, czy jego prawda, czy fałsz decyduje o tym, co zostanie zwrócone. Zwrócona wartość wypełnia naszą zmienną $ row_pos
Używam tego, aby umieścić go w pętli foreach, tuż przed jego potrzebą. To sprawia, że jest to bardzo wydajny jeden liniowiec, który nadaje mi odpowiednie nazwy klas, ponieważ mam już licznik, z którego id może korzystać później w programie. To jest krótki przykład tego, jak wykorzystam tę część.
Daje mi to nieparzyste i parzyste klasy w każdym rzędzie, dzięki czemu mogę użyć odpowiedniej klasy i rozłożyć wydrukowane wyniki na stronie.
Pełny przykład tego, czego używam, zwróć uwagę, że identyfikator ma do niego zastosowany licznik, a klasa ma do niego mój wynik nieparzysty / parzysty:
Podsumowując, daje mi to bardzo prosty sposób na stworzenie ładnego stołu.
źródło
Spróbuj tego,
źródło
Ostrzeżenie, z niektórych powodów, warunek ten nie ma wartości PRAWDA w deklaracji pętli for , jak pokazano poniżej:
To NIE działa:
To NIE działa:
To NIE działa:
Działa to OK :
źródło
źródło
źródło
Wypróbuj ten z polem #Input
źródło