31

以下の例では、0を整数と見なし、「0」を文字列と見なしたいのですが、empty()は「0」を文字列と見なします。

$var = '0';

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

'0'を文字列として受け取るために'empty()を作成するにはどうすればよいですか?

4

12 に答える 12

50

empty()にそれを取らせることはできません。それが設計された方法です。and代わりに、テストするステートメントを作成できます。

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

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

于 2010-11-09T22:27:20.160 に答える
9

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

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

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

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

于 2010-11-09T22:27:39.537 に答える
6

empty()だけではできません。マニュアルを参照してください。ただし、これは可能です。

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

基本的に、empty()は次のように動作します。

if (!$var) ...

ただし、変数が設定されていない場合、PHP通知はトリガーされません。

于 2010-11-09T22:29:03.310 に答える
6

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

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

isset()

PHPマニュアルから– isset()

isset —変数が設定されていてNULLでないかどうかを判別します

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

PHPマニュアルから– empty()

empty —変数が空かどうかを判別します

つまり、変数が空の文字列、false、array()、NULL、「0?」、0、および未設定の変数の場合はtrueを返します。無効である()

PHPマニュアルから– is_null()

is_null —変数が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");
        }
    }
}
于 2017-06-16T11:13:29.857 に答える
3

できません。マニュアルより

varの値が空でもゼロでもない場合、FALSEを返します。

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

  • ""(空の文字列)
  • 0(整数として0)
  • 「0」(文字列として0)
  • ヌル
  • FALSE
  • array()(空の配列)
  • var $ var; (宣言された変数ですが、クラスに値がありません)
于 2010-11-09T22:28:23.593 に答える
2

どちらの場合も、empty()が返されtrueます。ドキュメントを確認してください。

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

于 2010-11-09T22:28:20.420 に答える
2

私は常にこれをコードベースに追加します:

function is_blank($value) {
    return empty($value) && !is_numeric($value);
}

そして、empty()の代わりにそれを使用してください。これは、ゼロ(int、float、またはstring)を空でないままにする問題を解決します。

2011年5月に追加されたis_blank()を参照してください。

于 2011-05-11T00:08:12.370 に答える
1
$var = '0';

// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
    echo '$var is empty or the string "0"';
}
于 2010-11-09T22:31:55.413 に答える
1

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');
于 2010-11-09T23:00:45.557 に答える
1

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

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

// Trim the $filter

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

    // $filter data

};
于 2017-12-20T09:50:33.540 に答える
0

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

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

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

どちらも何も印刷しないでください。

于 2010-11-09T22:26:53.407 に答える
0

PHPでは整数、文字列、浮動小数点数、およびnullは重要ではないため、できません。

かっこいいから:)

変数の特徴的な機能を確認する必要があります:is_numeric()isset()、===、strlen()など。

例えば:

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

また

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

または他の例:)

于 2017-01-27T12:26:55.790 に答える