コードでさらに説明します。
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
結果は「空です」を返します。 empty()は既に変数を設定し、値を持っているかどうかをチェックすると思った。なぜ「空です」を返すのですか??
次のものは空と見なされます。
- ""(空の文字列)
- 0 (0 as an integer)
- 0.0(フロートとして0)
- "0"(文字列として0)
- ヌル
- FALSE
- array()(空の配列)
- var $ var; (変数は宣言されていますが、クラスに値はありません)
これは、ブール値false
への強制とまったく同じリストであることに注意してください。 empty
は、単に!isset($var) || !$var
です。代わりに isset
を試してください。
誰も非常に便利な 型比較表 を提案しないのはなぜだろうと思っていました。一般的な機能に関するすべての質問に答え、演算子を比較します。
スニペット:
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
他のチートシートに加えて、わからない場合に備えて、私は常にこのテーブルのハードコピーを机の上に置いています
数値の場合、is_numeric関数を使用する必要があります。
$var = 0;
if (is_numeric($var))
{
echo "Its not empty";
}
else
{
echo "Its empty";
}
代わりにstrlen()
を使用してください。一部の変数の可能な値として1/0を使用して、同じ問題に遭遇しました。変数に文字があるかどうかをテストするためにif (strlen($_POST['myValue']) == 0)
を使用しています。
私は最近、このパンツにパンツをはめた状態で捕まりました。多くの場合、対処する問題は変数の設定解除です。たとえば、フォーム要素が存在する場合と存在しない場合がありますが、多くの要素では、0
(または、より正確に投稿される'0'
、それでも「falsey」と評価されます)は、ドロップダウンリストにある正当な値です。
empty()
を最初に使用し、次にstrlen()
を使用するのが最善です。
if(!empty($var) && strlen($var)){
echo '"$var" is present and has a non-falsey value!';
}
言語の観点からemptyはvalueなしの意味を持ちます。他の人が言ったように、変数が定義されているかどうかを確認するためにisset()
を使用する必要があります。
それは私のために働いています!
//
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']=''
変数の値として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
if (empty($var) && $pieces[$var] != '0') {
//do something
}
私の場合、このコードは機能しました。
次のものは空と見なされます。
PHPマニュアル から
あなたの場合、$var
は0
であるため、empty($var)
はtrue
を返します。テストする前に結果を否定しているため、elseブロックは "Its empty
"を出力として実行します。
マニュアルから:varの値が空でもゼロでもない場合、FALSEを返します。
次のものは空と見なされます。
適切な例。データベースにint型フィールド(例:携帯電話番号)を作成し、フォームを介して次のデータベースに空の値を送信するか、SQLを使用して挿入します。データベース0に保存されるもの。int型であり、空白またはnullとして保存できないため。したがって、空ですが、0として保存されます。そのため、PHPを介してデータをフェッチし、空の値を確認します。それは非常に便利で論理的に正しいです。
0.00、0.000、0.0000 .... 0.0 ... 0も空であり、上記の例は、float、double、decimal(decimalには0.000などの異なるバリアントがあるなど、データベースに異なるタイプの値を格納するためにも使用できます。
emptyはempty ..を意味します。
私がする時
$var = '';
$var = '0';
var_dump(empty($var));
がfalseを返すことを期待しています。
配列内の項目をチェックする場合は、常に最初にisset($var)
を実行する必要があります。
値が設定されているかどうかを確認するには、isset()を使用する必要があります。
!($_POST['input_field_name'])==0
の代わりに($_POST['input_field_name'])!=0
のみを使用すると、0は空として扱われません。
説明と解決策を探している人がまだいるかどうかはわかりません。上記のコメントは、すべて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を返します。
数値データ型を使用している場合、保存方法は同じです。
値を表示するには、PHPに数値として処理するよう指示する必要があります。私が見つけた最も簡単な方法は、1を掛けることです。
実際にissetは、変数が設定されているかどうかを確認するだけです。この場合、変数が実際にゼロまたは空であるかどうかを確認する場合は、次の例を使用できます。
$myVar = '';
if (empty($myVar))
{
echo "Its empty";
}
echo "<br/>";
if ($myVar===0)
{
echo "also zero!";
}
通知のためだけに、$ myVar == 0は空の関数のように動作します。