web-dev-qa-db-ja.com

php:empty()の文字列としての「0」

以下の例では、0は整数と見なされ、 '0'は文字列と見なされますが、empty()は '0'を文字列と見なします。

$var = '0';

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is empty';
}

empty()を 'make'して '0'を文字列として取得するにはどうすればよいですか?

ありがとう。

24
laukok

あなたはそれを作ることができません。それはそれが設計された方法です。代わりに、テストするandステートメントを記述できます。

if (empty($var) && $var !== '0') {
    echo $var . ' is empty';
}

issetを使用することもできますが、もちろん、emptyがチェックする他の空を無効にしたい場合は除きます。

編集

型チェックも実行するようにチェックを修正しました。これを指摘してくれた2371に感謝します:)

41
Jim W.

emptyではできません。 PHP Manual: から

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

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

他のチェックを追加する必要があります。

8
Gordon

Empty()だけではできません。 manual を参照してください。あなたはこれを行うことができます:

if ($var !== '0' && empty($var)) {
   echo "$var is empty and is not string '0'";
}

基本的に、empty()は以下と同じことを行います:

if (!$var) ...

ただし、PHP=がトリガーされない変数が設定されていない場合に注意してください。

6
netcoder

できません。から マニュアル

Varに空ではなく、ゼロ以外の値がある場合は、FALSEを返します。

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

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

PHPには、変数の値をテストするために使用できるさまざまな関数があります。これに役立つ3つの関数は、isset()、empty()、is_null()です。これらの関数はすべてブール値を返します。これらの関数を正しく使用しないと、予期しない結果が生じる可能性があります。

isset()とempty()は反対の関数と見なされることがよくありますが、これは常に正しいとは限りません。この投稿では、これらの関数の違いについて説明します。

isset()

PHP手動– isset(): から

isset — Determine if a variable is set and is not NULL

つまり、変数がnullでない場合にのみtrueを返します。空の()

From PHP Manual – empty(): から

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)を返すことを意味します。 enter image description here

また、私はすべてのものをチェックするためのカスタム関数を作りました。

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");
        }
    }
}
3
manish1706

どちらの場合も、empty()trueを返します。ドキュメントを確認してください- http://php.net/empty

仕様に合わせて別の関数を使用することをお勧めします。

2
Jason McCreary

私はいつもコードベースに追加します

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 を参照してください。

2
Stemar

emptyは、phpのレパートリーの中で、最も紛らわしく、役に立たない関数です。使用しないでください。

値をチェックするときに知っておきたいことが3つあります。

  • 値が存在する(issetを使用)
  • 値には特定のタイプがあります(is_xxxを使用)
  • 値には特定のプロパティがあります(比較演算子、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');
1
user187291
$var = '0';

// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
    echo '$var is empty or the string "0"';
}
1
2371

この場合、空を使用しないでください。代わりにisset()を使用してください。これにより、整数として0も許可されます。

$var = '0';
if (!isset($var)) {
    print '$var is not set';
}

$var = 0;
if (!isset($var)) {
    print '$var is not set';
}

どちらも何も印刷するべきではありません。

0
Viper_Sb

PHPでは整数、文字列、浮動小数点数、nullは関係ないので、できません。

かっこいいから:)

変数is_numeric、isset、===、strlenなどの特性をチェックする必要があります。

例えば:

if (strlen(@$var)==0) {
    echo @$var . ' is empty';
}

または

if (@$var==="" || !isset($var)) {
    echo @$var . ' is empty';
}

または他の例:)

読んでくれてありがとう。

0
Ferhat KOÇER

空の$ filterをスキップし、$ filter = '0'およびその他の値をスキップしない場合

$filter = ''; //or $filter = '0'; or $filter = '1';

//trim the $filter

if( isset($filter) and ( $filter != '' or $filter == '0') ) {

//$filter data 

};
0
Ivan Procopet