PHP에서 숫자 / 변수가 홀수인지 심지어 짝수인지 확인하는 가장 간단한 방법은 무엇입니까? mod와 관련이 있습니까?
몇 가지 스크립트를 시도했지만 .. Google이 현재 제공하지 않습니다.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
PHP에서 숫자 / 변수가 홀수인지 심지어 짝수인지 확인하는 가장 간단한 방법은 무엇입니까? mod와 관련이 있습니까?
몇 가지 스크립트를 시도했지만 .. Google이 현재 제공하지 않습니다.
&
$a=3; if($a&1){echo 'odd';}else{echo 'even';} //returns 'odd'
답변:
당신은 모드가 시작하기에 좋은 장소라고 생각하는데 옳았습니다. $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
}
(bool)($number & 1)
또는
(bool)(~ $number & 1)
if (~string.indexOf("@")) {}
대신 if (string.indexOf("@") !== -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
}
여기 내 결과에 대한 증거로 시간 테스트 가 있습니다.
in_array
때로는 비트 비트 연산자 를 포함하도록 코드를 업데이트했습니다 .
$num & 1
:). 당신은 또한 16 진수를 할 수 있습니다 : array (0, 2, 4, 6, 8, A, C, E, F) : D.
나는 약간의 테스트를했는데 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
//for numbers n [0,1,2,3,4....]
if((n+2)%2==1) {
//odd
}else {
//even
}
0은 짝수입니다. 다시 말해, 그 정수 (정수의 품질이 짝수 또는 홀수 임)는 동일합니다. 0을 증명하는 가장 간단한 방법은 "짝수"의 정의에 맞는지 확인하는 것입니다. 2의 정수 배수, 특히 0 × 2입니다. 결과적으로 0은 짝수를 특징으로하는 모든 속성을 공유합니다. 는 2로 나눌 수 있고, 0은 양쪽에 홀수로 둘러싸이고, 0은 정수 (0)의 합이며 0 개의 객체 세트는 두 개의 동일한 세트로 나눌 수 있습니다. 에서 http://en.wikipedia.org/wiki/Parity_of_zero
PHP는 null과 빈 문자열을 자동으로 0으로 변환합니다. 그것은 모듈로에서도 발생합니다. 따라서 코드는
$number % 2 == 0 or !($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>";
}
}
The print is there for testing purposes, hence in practice it becomes:
function testEven($pArg){
if(is_int($pArg)=== true){
return $pArg%2;
}
return false;
}
이 함수는 홀수 인 경우 1을, 짝수 인 경우 0을, 숫자가 아닌 경우 false를 반환합니다. 나는 항상 === true 또는 === false를 써서 (그리고 다른 프로그래머들에게) 테스트가 의도 한 것임을 알린다.
사용 조건 및 루프 문이없는 짝수 또는 홀수 번호를 확인하십시오.
이것은 나를 위해 일한다 ..!
$(document).ready(function(){
$("#btn_even_odd").click(function(){
var arr = ['Even','Odd'];
var num_even_odd = $("#num_even_odd").val();
$("#ans_even_odd").html(arr[num_even_odd % 2]);
});
});
<!DOCTYPE html>
<html>
<head>
<script src="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><input type="text" name="num_even_odd" id="num_even_odd" placeholder="Enter Only Number"></td>
</tr>
<tr>
<th>Your Answer Is :</th>
<td id="ans_even_odd" style="font-size:15px;color:gray;font-weight:900;"></td>
</tr>
<tr>
<td><input type="button" name="btn_even_odd" id="btn_even_odd" value="submit"></td>
</tr>
</table>
</body>
</html>
카운터가 이미 있다고 가정합니다. 루프 끝에서 증가하는 $ i에서, 이것은 속기 쿼리를 사용하여 작동합니다.
$row_pos = ($i & 1) ? 'odd' : 'even';
그래서 이것이 무엇을하는지, 그것은 참인지 거짓인지에 따라 본질적으로 $ i가 이상한 진술을 쿼리합니다. 반환 된 값은 변수 $ row_pos를 채 웁니다.
내가 이것을 사용하기 전에 foreach 루프 안에 그것을 배치하는 것이 필요합니다. 이것은 적절한 클래스 이름을 제공하는 매우 효율적인 라이너입니다. 나중에 프로그램에서. 이것은이 부분을 어떻게 사용할 지에 대한 간단한 예입니다.
<div class='row-{$row_pos}'> random data <div>
이것은 각 행에 홀수 및 짝수 클래스를 제공하므로 올바른 클래스를 사용하고 인쇄 된 결과를 페이지 아래로 스트라이프 할 수 있습니다.
내가 사용하는 것에 대한 전체 예제는 id에 카운터가 적용되고 클래스에는 내 홀수 / 짝수 결과가 적용됩니다. :
$i=0;
foreach ($a as $k => $v) {
$row_pos = ($i & 1) ? 'odd' : 'even';
echo "<div id='A{$i}' class='row-{$row_pos}'>{$v['f_name']} {$v['l_name']} - {$v['amount']} - {$v['date']}</div>\n";
$i++;
}
요약하면 이것은 예쁜 테이블을 만드는 매우 간단한 방법입니다.
경고 : 어떤 이유로이 조건은 아래와 같이 for 루프 선언 에서 TRUE로 평가되지 않습니다 .
각 반복의 시작 부분에서
expr2
평가됩니다. TRUE로 평가되면 루프가 계속되고 중첩 된 명령문이 실행됩니다. FALSE로 평가되면 루프 실행이 종료됩니다.
작동 하지 않습니다 .
for ($i=0; $i % 2 === 1 && $i < count($str); $i++){
// echo "-----------\n";
}
작동 하지 않습니다 .
for ($i=0; ($i % 2 === 1) && $i < count($str); $i++){
// echo "-----------\n";
}
작동 하지 않습니다 .
for ($i=0; ($i % 2) === 1 && $i < count($str); $i++){
// echo "-----------\n";
}
이 작품 OK :
for ($i=0; $i<count($str); $i++){
if ($i % 2 === 1) {
// echo "-----------\n";
}
}
$before = microtime(true);
$n = 1000;
$numbers = range(1,$n);
$cube_numbers = array_map('cube',$numbers);
function cube($n){
$msg ='even';
if($n%2 !=0){
$msg = 'odd';
}
return "The Number is $n is ".$msg;
}
foreach($cube_numbers as $cube){
echo $cube . "<br/>";
}
$after = microtime(true);
echo $after-$before. 'seconds';
# 입력 필드로 이것을 시도하십시오
<?php
//checking even and odd
echo '<form action="" method="post">';
echo "<input type='text' name='num'>\n";
echo "<button type='submit' name='submit'>Check</button>\n";
echo "</form>";
$num = 0;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["num"])) {
$numErr = "<span style ='color: red;'>Number is required.</span>";
echo $numErr;
die();
} else {
$num = $_POST["num"];
}
$even = ($num % 2 == 0);
$odd = ($num % 2 != 0);
if ($num > 0){
if($even){
echo "Number is even.";
} else {
echo "Number is odd.";
}
} else {
echo "Not a number.";
}
}
?>