PHP에서 0은 비어있는 것으로 취급됩니까?


144

코드는 더 많은 것을 설명 할 것이다 :

$var = 0;

if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}

결과는 "비어 있습니다"를 반환합니다. empty ()가 이미 변수를 설정하고 값을 가지고 있는지 확인한다고 생각했습니다. "빈 상태"를 반환하는 이유는 무엇입니까 ??


15
@stereo empty는 아마도 가장 유용하지만 널리 알려진 PHP 함수일 것입니다. 언제 어떻게 사용하는지 배우십시오.
deceze

2
@stereo empty는 본질적으로 짧습니다 isset($var) && $var != false. 당신은 empty이것으로 발을 쏠 수 있도록 아주 이상하게 들고 있어야합니다 . ; P
사망

@stereo 1) "일관되지 않은"위치는 어디입니까? 그것은 주석에 말하는 것처럼 작동합니다. 2) false"정의되지 않은 변수"오류를 유발하지 않고 변수를 느슨하게 비교하는 것은 쓸모가 없습니까? 글쎄, 당신이 이것을하지 않는 것 같아요 ... 3) 보안 컨텍스트에서 잘못된 기능을 선택한다고해서 기능 자체가 나쁘거나 쓸모 없거나 일관성이 없다는 것을 의미하지는 않습니다. 그것은 누군가가 그 일을 위해 잘못된 기능을 선택했다는 것을 의미합니다.
deceze


18
@deceze-함수가 너무 광범위하게 잘못 이해 empty()되면 이름이 잘못되었을 수 있습니다.
martinstoeckli

답변:


189

http://php.net/empty

다음은 비어있는 것으로 간주됩니다.

  • ""(빈 문자열)
  • 0 (정수로 0)
  • 0.0 (플로트로 0)
  • "0"(문자열로 0)
  • 없는
  • 그릇된
  • array () (빈 배열)
  • var $ var; (클래스에 값이없는 선언 된 변수)

이것은 Boolean 강제 변환과 정확히 동일한 목록 false입니다. empty간단 !isset($var) || !$var합니다. isset대신 시도하십시오 .


따라서 다음과 같이 확인해야합니다. if (isset ($ var) && $ var! = 0) {Do Something} ??
mysqllearner

1
@mysql이 경우을 사용할 수도 !empty($var)있지만 질문에 쓴 것과 동일하지는 않습니다. 사용할 것은 전적으로 어떤 값으로 간주 하느냐에 달려 있습니다 true. 다만 차이점 비교 issetempty오른쪽 상황에 맞는 조합을 선택합니다.
deceze

7
@mysqllearner : if를 isset반환 True합니다 $var=0. 그러나 당신이 의미하는 바 if(isset($var) && $var != 0)는 다음과 같습니다empty
Felix Kling

@mysqllearner isset은 비어 있지 않은지를 감지합니다. 비어 있는지 확인하려면 대신! isset을 사용하십시오.

1
@Deji PHP는 웹 언어로서의 뿌리를 가지고 있으며 HTTP 요청의 값은 항상 문자열이므로 '0'와 동등한 것으로 취급됩니다 0. 이것이 PHP의 핵심 디자인 철학입니다. 나는 이것이 매우 논쟁의 여지가있는 선택이라는 것에 동의 하지만, 나는 당신과 그 선택에 대해 토론하기 위해 여기에 있지 않습니다. 빼기 통지 empty와 동등한 PHP의 논리 내에서 == false훌륭한 IMO가 있습니다. PHP와는 다른 주제와는 매우 다른 점이 있습니다.
사망

76

아무도 왜 매우 편리한 형식 비교표를 제안하지 않았는지 궁금했습니다 . 공통 함수에 대한 모든 질문에 답하고 연산자를 비교합니다.

스 니펫 :

Expression      | empty($x)
----------------+--------
$x = "";        | true    
$x = null       | true    
var $x;         | true    
$x is undefined | true    
$x = array();   | true    
$x = false;     | true    
$x = true;      | false   
$x = 1;         | false   
$x = 42;        | false   
$x = 0;         | true    
$x = -1;        | false   
$x = "1";       | false   
$x = "0";       | true    
$x = "-1";      | false   
$x = "php";     | false   
$x = "true";    | false   
$x = "false";   | false   

다른 치트 시트와 함께, 나는 확실하지 않은 경우를 대비하여 항상 책상 에이 테이블의 사본을 보관합니다.


2
치트 시트를 업데이트해야합니다. 이제 좀 더 주겠습니다 ... 0.0 = true, 0.00 = true, "0.0"= false
Sayed Mohd Ali

34

숫자 값의 경우 is_numeric 함수를 사용해야합니다.

$var = 0;

if (is_numeric($var))
{
  echo "Its not empty";
} 
else 
{
    echo "Its empty";
}

1
'0'또는 0에 대해 확인해야 할 때
유용한

12

strlen()대신 사용하십시오 . 일부 변수의 가능한 값으로 1/0을 사용하여 동일한 문제를 겪었습니다. if (strlen($_POST['myValue']) == 0)변수에 문자가 있는지 여부를 테스트하는 데 사용 하고 있습니다.


큰 로그를 생성하지 않으려면 @strlen을 추가하여 오류 로그를 생략하십시오.
Miguel

왜 당신은 넣어 것 @strlen입니다. 변수를 전달하는 한 오류를 출력해서는 안됩니다. strlen이 비어 있으면 값을 0으로 기록합니다.
sketch that

2
변수가 설정되어 있지 않으면 오류가 발생한다고 생각합니다.
Evren Yurtesen

11

나는 최근에 이것에 바지를 내려 놓았다. 우리가 자주 다루는 문제는 설정되지 않은 변수입니다. 예를 들어, 존재하지 않았을 수도있는 폼 요소, 많은 요소 0(또는 '0'포스트를 더 정확하게 통과하지만 여전히 "거짓"으로 평가되는 문자열) )은 드롭 다운 목록에 적법한 값입니다.

사용 empty()후 제하는 것은 strlen()당신의 가장 최고의 당신이 아니라이 필요한 경우, 같은 :

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}

6

언어 적 관점에서 가치없는 의미를 갖습니다 . 다른 사람들이 말했듯이 isset()변수가 정의되어 있는지 확인 하려면 사용해야한다고 말한 것 입니다.


1
이 간단한 답변을 통해 0null문제를 쉽게 정리할 수있었습니다. 감사!
Giacomo1968

4

empty()로 평가되는 모든 항목에 대해 true를 반환합니다. FALSE실제로 !위장 에서는 'not'( )입니다. 나는 당신이 의미하는 것 같아isset()


4

변수 사용에서 0을 값으로 허용하려면 isset

변수가 비어 있는지 확인

$var = 0;

if ($var == '') {
    echo "empty";
} else {
    echo "not empty"; 
}
//output is empty

변수가 설정되어 있는지 확인

$var = 0;

if (isset($var)) {
    echo "not empty";
} else {    
    echo "empty";
}
//output is not empty

4

그것은 나를 위해 일하고 있습니다!

//
if(isset($_POST['post_var'])&&$_POST['post_var']!==''){
echo $_POST['post_var'];
}

//results:
1 if $_POST['post_var']='1'
0 if $_POST['post_var']='0'
skip if $_POST['post_var']=''

1

다음은 비어있는 것으로 간주됩니다.

  • ""(빈 문자열)
  • 0 (정수로 0)
  • "0"(문자열로 0)
  • 없는
  • 그릇된
  • array () (빈 배열)
  • var $ var; (클래스에 값이없는 선언 된 변수)

에서 PHP 매뉴얼

귀하의 경우에 $var이다 0, 그래서 empty($var)돌아갑니다 true다른 블록이 "주고 실행됩니다, 그래서 당신이 그것을 테스트하기 전에 결과를 부정하는, Its empty출력으로".


1

수동에서 : var에 비어 있지 않고 0이 아닌 값이 있으면 FALSE를 반환합니다.

다음은 비어있는 것으로 간주됩니다.

  • ""(빈 문자열)
  • 0 (정수로 0)
  • "0"(문자열로 0) NULL
  • FALSE array () (빈 배열) var
  • $ var; (클래스에 값이없는 선언 된 변수)

더 : http://php.net/manual/en/function.empty.php


1
if (empty($var) && $pieces[$var] != '0') {
//do something
}

제 경우에는이 코드가 작동했습니다.


0

실제로 isset은 변수가 설정되어 있는지 확인합니다.이 경우 변수가 실제로 0인지 비어 있는지 확인하려면 다음 예제를 사용할 수 있습니다.

$myVar = '';
if (empty($myVar))
{
  echo "Its empty";
}
echo "<br/>";

if ($myVar===0)
{
  echo "also zero!";
}

통지를 위해 $ myVar == 0 빈 함수처럼 작동합니다.


0

공허 란 공허함을 의미합니다.

내가 할 때

$var = '';    
$var = '0';

나는 그것이 var_dump(empty($var));거짓을 반환 할 것으로 기대합니다 .

배열에서 항목을 확인하는 경우 항상 isset($var)먼저 해야합니다 .


0

($_POST['input_field_name'])!=0대신 !($_POST['input_field_name'])==00 만 사용 하면 비어있는 것으로 취급되지 않습니다.


0

여전히 설명과 해결책을 찾는 사람들이 있는지 확실하지 않습니다. 위의 의견은 TRUE / FALSE / 1 / 0의 차이점에 대해 모두 말합니다.
. 실제 값을 표시하는 방법으로 2 센트를 가져오고 싶습니다.

부에 네

부울 데이터 형식으로 작업하는 경우 TRUE vs. FALSE 결과를 찾고 있습니다. MySQL에 저장하면 1 resp로 저장됩니다. 0 (내 잘못하지 않은 경우 서버 메모리에서 동일합니다).

따라서 PHP에서 값을 표시하려면 값이 true (1) 또는 false (0)인지 확인하고 "TRUE"또는 "FALSE"또는 "1"또는 "0"중 원하는 것을 표시해야합니다.
주의, 0보다 크거나 다른 모든 것은 PHP에서 TRUE로 간주됩니다. 예 : 2, "abc"등은 모두 TRUE를 반환합니다.

비트, TINYINT

숫자 데이터 유형으로 작업하는 경우 저장 방법은 동일합니다.
값을 표시하려면 PHP에 숫자로 처리하도록 지시해야합니다. 내가 찾은 가장 쉬운 방법은 1을 곱하는 것입니다.


0

적절한 예. 데이터베이스에 int type 필드 (예 : 휴대 전화 번호)를 만들고 양식을 통해 다음 데이터베이스의 빈 값을 제출하거나 SQL을 사용하여 삽입하십시오. int 유형이고 공백 또는 널로 저장할 수 없으므로 데이터베이스 0에 저장되는 내용. 따라서 비어 있지만 0으로 저장됩니다. 따라서 PHP를 통해 데이터를 가져오고 빈 값을 확인할 때. 매우 유용하고 논리적으로 정확합니다.

0.00, 0.000, 0.0000 .... 0.0 ... 0도 비어 있으며 위의 예제는 float, double, decimal (십진수는 0.000과 같은 다른 변형이 있음)과 같은 데이터베이스에 다른 유형의 값을 저장하는 데 사용할 수도 있습니다.


0

값이 설정되어 있는지 확인하려면 isset ()을 사용해야합니다.


@Veershetty, Stack Overflow에 오신 것을 환영합니다. 답변 해 주셔서 감사하지만 기존의 자세한 답변보다 새로운 것을 추가하지 않는 것 같습니다. 답변을 편집하여 다른 답변에서 누락 된 세부 사항을 추가하거나 새로운 것이 추가되지 않은 경우 답변 삭제를 고려하십시오.
Gricey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.