2

スーパーグローバルのような$_GET、または$_POST特定のキーの値の存在をチェックする場合、次の機能をより簡潔な方法で包含するメソッドはありますか?

if (isset($_POST['foo']) && $_POST['foo'] !== '') {
    // ...
}

値が空の文字列の場合でも関数isset()自体が返されるため、使用できません。TRUE''

just$_POST['foo'] !== ''を使用すると、それ自体で正しく機能しますが、E_NOTICE未定義のインデックスが発行されるため、望ましくありません。

empty()関数は、有効な値である value を返すTRUEため、それ"0"も使用できません。

明らかな何かが欠けていますか、それともこれが本当に最善/唯一の方法ですか?

4

3 に答える 3

5

おそらくあなたが探しているものarray_key_exists()

if (array_key_exists('foo', $_POST)){
    // will execute when $_POST['foo'] is set, even if to null, false, '' etc.
};

空の文字列 ( ) に一致させたくない場合''は、おそらく解決策で十分です。上記の解決策はfalse、キーが存在しない場合にのみ提供されます。

于 2012-07-21T01:55:05.957 に答える
2

はいつでも黙らせることができますE_NOTICE。この場合、E_NOTICE変数が設定されていない場合に a がスローされることが予想されます (実際、ここで考えられる唯一のエラー条件です)。

if(@$_POST['foo'] != '') {

}
于 2012-07-21T02:05:46.847 に答える
1

スクリプトの開始時にarray_mergeを使用して、投稿全体を一度に実行してみませんか。

すなわち

$default = array('foo' => "2", 'bar' => 'Hello World');
$postValues = array_merge($default, $POST);

次に、 を使用します$postValuesisset代わりにデフォルトが使用されるため、コードの残りの部分はどこにでもあります。

于 2012-07-21T02:15:24.160 に答える