web-dev-qa-db-ja.com

PHPでは、0は空として扱われますか?

コードでさらに説明します。

$var = 0;

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

結果は「空です」を返します。 empty()は既に変数を設定し、値を持っているかどうかをチェックすると思った。なぜ「空です」を返すのですか??

120
mysqllearner

http://php.net/empty

次のものは空と見なされます。

  • ""(空の文字列)
  • 0 (0 as an integer)
  • 0.0(フロートとして0)
  • "0"(文字列として0)
  • ヌル
  • FALSE
  • array()(空の配列)
  • var $ var; (変数は宣言されていますが、クラスに値はありません)

これは、ブール値falseへの強制とまったく同じリストであることに注意してください。 emptyは、単に!isset($var) || !$varです。代わりに isset を試してください。

162
deceze

誰も非常に便利な 型比較表 を提案しないのはなぜだろうと思っていました。一般的な機能に関するすべての質問に答え、演算子を比較します。

スニペット:

Expression      | empty()
----------------+--------
$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   

他のチートシートに加えて、わからない場合に備えて、私は常にこのテーブルのハードコピーを机の上に置いています

71
Dan Soap

数値の場合、is_numeric関数を使用する必要があります。

$var = 0;

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

代わりにstrlen()を使用してください。一部の変数の可能な値として1/0を使用して、同じ問題に遭遇しました。変数に文字があるかどうかをテストするためにif (strlen($_POST['myValue']) == 0)を使用しています。

10
Calin Rusu

私は最近、このパンツにパンツをはめた状態で捕まりました。多くの場合、対処する問題は変数の設定解除です。たとえば、フォーム要素が存在する場合と存在しない場合がありますが、多くの要素では、0(または、より正確に投稿される'0' 、それでも「falsey」と評価されます)は、ドロップダウンリストにある正当な値です。

empty()を最初に使用し、次にstrlen()を使用するのが最善です。

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

言語の観点からemptyvalueなしの意味を持ちます。他の人が言ったように、変数が定義されているかどうかを確認するためにisset()を使用する必要があります。

6
Elzo Valugi

それは私のために働いています!

//
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']=''
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
3
bhu1st

empty()FALSEに評価されるすべてに対してtrueを返しますが、実際には 'not'(!)に変装しています。私はあなたが isset() を意味したと思う

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

私の場合、このコードは機能しました。

1
Cherrish

次のものは空と見なされます。

  • ""(空の文字列)
  • 0 (0 as an integer)
  • "0"(文字列として0)
  • ヌル
  • FALSE
  • array()(空の配列)
  • var $ var; (変数は宣言されていますが、クラスに値はありません)

PHPマニュアル から

あなたの場合、$var0であるため、empty($var)trueを返します。テストする前に結果を否定しているため、elseブロックは "Its empty"を出力として実行します。

1
codaddict

マニュアルから:varの値が空でもゼロでもない場合、FALSEを返します。

次のものは空と見なされます。

  • ""(空の文字列)
  • 0 (0 as an integer)
  • "0"(文字列として0)NULL
  • FALSE array()(空の配列)var
  • $ var; (変数は宣言されていますが、クラスに値はありません)

詳細: http://php.net/manual/en/function.empty.php

1
Adam Kiss

適切な例。データベースにint型フィールド(例:携帯電話番号)を作成し、フォームを介して次のデータベースに空の値を送信するか、SQLを使用して挿入します。データベース0に保存されるもの。int型であり、空白またはnullとして保存できないため。したがって、空ですが、0として保存されます。そのため、PHPを介してデータをフェッチし、空の値を確認します。それは非常に便利で論理的に正しいです。

0.00、0.000、0.0000 .... 0.0 ... 0も空であり、上記の例は、float、double、decimal(decimalには0.000などの異なるバリアントがあるなど、データベースに異なるタイプの値を格納するためにも使用できます。

0
Sayed Mohd Ali

emptyはempty ..を意味します。

私がする時

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

var_dump(empty($var));がfalseを返すことを期待しています。

配列内の項目をチェックする場合は、常に最初にisset($var)を実行する必要があります。

0
Paul Wolbers

値が設定されているかどうかを確認するには、isset()を使用する必要があります。

0
Veershetty

!($_POST['input_field_name'])==0の代わりに($_POST['input_field_name'])!=0のみを使用すると、0は空として扱われません。

0
Manish Sharma

説明と解決策を探している人がまだいるかどうかはわかりません。上記のコメントは、すべてTRUE/FALSE/1/0の違いについて述べています。
実際の価値を表示する方法として、2セントを持ち込みたいです。

ブーリアン

ブールデータ型を使用している場合、TRUEとFALSEの結果を探しています。 MySQLに保存する場合、1個ずつ保存されます。 0(間違えていなければ、これはサーバーのメモリでも同じです)。

そのため、PHPで値を表示するには、値がtrue(1)またはfalse(0)であるかどうかを確認し、「TRUE」または「FALSE」、あるいは「1」または「0」のように表示する必要があります。
注意、0より大きい(または異なる)ものはすべて、PHPではTRUEと見なされます。例:2、「abc」などはすべてTRUEを返します。

ビット、TINYINT

数値データ型を使用している場合、保存方法は同じです。
値を表示するには、PHPに数値として処理するよう指示する必要があります。私が見つけた最も簡単な方法は、1を掛けることです。

0
Alex Tanner

実際にissetは、変数が設定されているかどうかを確認するだけです。この場合、変数が実際にゼロまたは空であるかどうかを確認する場合は、次の例を使用できます。

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

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

通知のためだけに、$ myVar == 0は空の関数のように動作します。

0
arash