0

この方法を使用して、空の場合に配列 $arr をテストしました

if(!empty($arr)){ //do something }

最近、誰かが次のような別のものを使用しているのを見ました:

if($arr){ //do something }

知りたいのは、2番目の方法がアレイをテストする単純な方法ではないか、それとも潜在的なリスクがありますか?

4

4 に答える 4

3

2つ目は、配列をブール値にキャストします。空の配列はにキャストされfalse、それ以外はにキャストされtrueます。したがってif($arr)if(!empty($arr))機能的には同じです。

于 2012-04-24T02:45:36.670 に答える
3

のような空の配列array()は、に等しいと見なされfalseます。したがって、単純なif ($arr)ものは完全にうまく機能します。

empty同じ種類の比較をNOTICE行いますが、変数$arrがまったく存在しない場合、欠落している変数についてはトリガーしません。empty変数が存在することが確実な場合は、貴重なエラー報告を抑制するため、使用しないでください。empty変数が存在するかどうかが本当にわからず、それを制御できない場合にのみ使用してください。

詳細については、PHPのissetAndemptyの決定的なガイドをempty参照してください。

于 2012-04-24T02:47:31.400 に答える
1

どちらの方法も機能的には同等です。以下の事項について言及しているドキュメントはempty()空であると見なされます

"", 0, 0.0, "0", NULL, FALSE, array(), var $var; 

ブール値へのキャストを見ると、リストがリストと一致していることがわかります。つまり、両方のメソッドが同じ方法で異なるタイプを処理します。

于 2012-04-24T02:46:09.903 に答える
0

2番目の方法は理想的ではありません。2番目の方法を使用して、配列を処理している(そして処理していない)と判断し、それをforeachステートメントに渡すと、エラーが発生します。また、if($ arr)でテストするよりも、チェックしていることについてより有益です。

私の好みは:

if (is_array($arr) && count($arr) > 0) {
    //work with array
}

編集:ここでの私の根本的なポイントは、アレイの存在をテストする機能は問題の一部にすぎないということだと思います。$ arrが文字列であることが判明した場合は、より堅牢なチェックが必要です。

于 2012-04-24T02:45:45.097 に答える