PHP에서 숫자 / 변수가 홀수인지 심지어 짝수인지 확인하는 가장 간단한 방법은 무엇입니까? mod와 관련이 있습니까?
몇 가지 스크립트를 시도했지만 .. Google이 현재 제공하지 않습니다.
답변
당신은 모드가 시작하기에 좋은 장소라고 생각하는데 옳았습니다. $number
짝수 이면 true를 반환 하고 홀수이면 false를 반환하는 표현식이 있습니다 .
$number % 2 == 0
모든 정수 PHP 값에 대해 작동합니다 . 산술 연산자 PHP 도 참조하십시오 .
예:
$number = 20;
if ($number % 2 == 0) {
print "It's even";
}
산출:
심지어
답변
또 다른 옵션은 간단한 비트 검사입니다.
n & 1
예를 들면 다음과 같습니다.
if ( $num & 1 ) {
//odd
} else {
//even
}
답변
예 모드를 사용하여
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
답변
모든 대답이 정확하고 정확하지만 한 줄에 간단한 해결책은 다음과 같습니다.
$check = 9;
어느 한 쪽:
echo ($check & 1 ? 'Odd' : 'Even');
또는:
echo ($check % 2 ? 'Odd' : 'Even');
잘 작동합니다.
답변
(bool)($number & 1)
또는
(bool)(~ $number & 1)
답변
다른 옵션은 마지막 숫자가 짝수인지 확인하는 것입니다.
$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
}
또는 더 빨리 만들기 위해 ( 때때로 비트mod operator
) :
$even = array(0, 2, 4, 6, 8);
if(in_array(substr($number, -1),$even)){
// Even Number
}else{
// Odd Number
}
여기 내 결과에 대한 증거로 시간 테스트 가 있습니다.
답변
나는 약간의 테스트를했는데 mod is_int
와 &
-operator 사이 에서 mod가 가장 빠르며 & 연산자가 밀접 하다는 것을 알았습니다 .
is_int
mod보다 거의 4 배 느립니다.
테스트 목적으로 다음 코드를 사용했습니다.
$number = 13;
$before = microtime(true);
for ($i=0; $i<100000; $i++) {
$test = ($number%2?true:false);
}
$after = microtime(true);
echo $after-$before." seconds mod<br>";
$before = microtime(true);
for ($i=0; $i<100000; $i++) {
$test = (!is_int($number/2)?true:false);
}
$after = microtime(true);
echo $after-$before." seconds is_int<br>";
$before = microtime(true);
for ($i=0; $i<100000; $i++) {
$test = ($number&1?true:false);
}
$after = microtime(true);
echo $after-$before." seconds & operator<br>";
내가 얻은 결과는 꽤 일관되었습니다. 샘플은 다음과 같습니다.
0.041879177093506 seconds mod
0.15969395637512 seconds is_int
0.044223070144653 seconds & operator