以下の例では、0は整数と見なされ、 '0'は文字列と見なされますが、empty()は '0'を文字列と見なします。
$var = '0';
// Evaluates to true because $var is empty
if (empty($var)) {
echo '$var is empty';
}
empty()を 'make'して '0'を文字列として取得するにはどうすればよいですか?
ありがとう。
あなたはそれを作ることができません。それはそれが設計された方法です。代わりに、テストするand
ステートメントを記述できます。
if (empty($var) && $var !== '0') {
echo $var . ' is empty';
}
isset
を使用することもできますが、もちろん、empty
がチェックする他の空を無効にしたい場合は除きます。
編集
型チェックも実行するようにチェックを修正しました。これを指摘してくれた2371に感謝します:)
empty
ではできません。 PHP Manual: から
次のものは空と見なされます。
- ""(空の文字列)
- 0 (0 as an integer)
- "0"(文字列として0)
- ヌル
- FALSE
- array()(空の配列)
- var $ var; (宣言された変数ですが、クラスに値がありません)
他のチェックを追加する必要があります。
Empty()だけではできません。 manual を参照してください。あなたはこれを行うことができます:
if ($var !== '0' && empty($var)) {
echo "$var is empty and is not string '0'";
}
基本的に、empty()は以下と同じことを行います:
if (!$var) ...
ただし、PHP=がトリガーされない変数が設定されていない場合に注意してください。
できません。から マニュアル
Varに空ではなく、ゼロ以外の値がある場合は、FALSEを返します。
次のものは空と見なされます。
- ""(空の文字列)
- 0 (0 as an integer)
- "0"(文字列として0)
- ヌル
- FALSE
- array()(空の配列)
- var $ var; (宣言された変数ですが、クラスに値がありません)
PHPには、変数の値をテストするために使用できるさまざまな関数があります。これに役立つ3つの関数は、isset()、empty()、is_null()です。これらの関数はすべてブール値を返します。これらの関数を正しく使用しないと、予期しない結果が生じる可能性があります。
isset()とempty()は反対の関数と見なされることがよくありますが、これは常に正しいとは限りません。この投稿では、これらの関数の違いについて説明します。
isset()
isset — Determine if a variable is set and is not NULL
つまり、変数がnullでない場合にのみtrueを返します。空の()
empty — Determine whether a variable is empty
つまり、変数が空の文字列、false、array()、NULL、「0?、0」、および未設定の変数の場合、trueを返します。無効です()
From PHP Manual – is_null(): から
is_null — Finds whether a variable is NULL
つまり、変数がnullの場合にのみtrueを返します。 is_null()はisset()の反対ですが、isset()は未知の変数に適用できるという違いがありますが、is_null()は宣言された変数にのみ適用されます。
写真の表は、これらの関数が異なる値に対して返すものの簡単なリファレンスです。空白は、関数がbool(false)を返すことを意味します。
また、私はすべてのものをチェックするためのカスタム関数を作りました。
function checkEmpty($var, $term = ""){
if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){
return true;
}
else{
if($term != ""){
return array("status" => "error", "desc" => "$term can not be empty");
}
else{
return array("status" => "error", "desc" => "value can not be empty");
}
}
}
どちらの場合も、empty()
はtrue
を返します。ドキュメントを確認してください- http://php.net/empty 。
仕様に合わせて別の関数を使用することをお勧めします。
私はいつもコードベースに追加します
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
empty()の代わりに使用します。これは、ゼロ(int、float、またはstring)を空でないままにする問題を解決します。
2011年5月に追加された http://www.php.net/manual/en/function.empty.php#103756 を参照してください。
empty
は、phpのレパートリーの中で、最も紛らわしく、役に立たない関数です。使用しないでください。
値をチェックするときに知っておきたいことが3つあります。
strpos
または正規表現を使用)。(最後の2つは、タイプキャストまたは '==='を使用して1つに組み合わせることができます)。
例:
if(isset($var) && is_string($var) && strlen($var) > 0)...
if(isset($var) && intval($var) > 0)...
if(isset($var) && $var === '0')...
これはより冗長に見えますが、あなたが何をしているかを明確に示しています。構造オブジェクトの場合、多くの場合、ショートカットゲッターがあると便利です。
/// get a string
function s($ary, $key, $default = '') {
if(!isset($ary[$key])) return $default;
$s = trim($ary[$key]);
return strlen($s) ? $s : $default;
}
/// get a natural number
function n($ary, $key, $default = 0) {
$n = intval(s($ary, $key));
return $n > 0 ? $n : $default;
}
$name = s($_POST, 'name');
$age = n($_POST, 'age');
$var = '0';
// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
echo '$var is empty or the string "0"';
}
この場合、空を使用しないでください。代わりにisset()を使用してください。これにより、整数として0も許可されます。
$var = '0';
if (!isset($var)) {
print '$var is not set';
}
$var = 0;
if (!isset($var)) {
print '$var is not set';
}
どちらも何も印刷するべきではありません。
PHPでは整数、文字列、浮動小数点数、nullは関係ないので、できません。
かっこいいから:)
変数is_numeric、isset、===、strlenなどの特性をチェックする必要があります。
例えば:
if (strlen(@$var)==0) {
echo @$var . ' is empty';
}
または
if (@$var==="" || !isset($var)) {
echo @$var . ' is empty';
}
または他の例:)
読んでくれてありがとう。
空の$ filterをスキップし、$ filter = '0'およびその他の値をスキップしない場合
$filter = ''; //or $filter = '0'; or $filter = '1';
//trim the $filter
if( isset($filter) and ( $filter != '' or $filter == '0') ) {
//$filter data
};