この方法を使用して、空の場合に配列 $arr をテストしました
if(!empty($arr)){ //do something }
最近、誰かが次のような別のものを使用しているのを見ました:
if($arr){ //do something }
知りたいのは、2番目の方法がアレイをテストする単純な方法ではないか、それとも潜在的なリスクがありますか?
この方法を使用して、空の場合に配列 $arr をテストしました
if(!empty($arr)){ //do something }
最近、誰かが次のような別のものを使用しているのを見ました:
if($arr){ //do something }
知りたいのは、2番目の方法がアレイをテストする単純な方法ではないか、それとも潜在的なリスクがありますか?
2つ目は、配列をブール値にキャストします。空の配列はにキャストされfalse
、それ以外はにキャストされtrue
ます。したがってif($arr)
、if(!empty($arr))
機能的には同じです。
のような空の配列array()
は、に等しいと見なされfalse
ます。したがって、単純なif ($arr)
ものは完全にうまく機能します。
empty
同じ種類の比較をNOTICE
行いますが、変数$arr
がまったく存在しない場合、欠落している変数についてはトリガーしません。empty
変数が存在することが確実な場合は、貴重なエラー報告を抑制するため、使用しないでください。empty
変数が存在するかどうかが本当にわからず、それを制御できない場合にのみ使用してください。
詳細については、PHPのissetAndemptyの決定的なガイドをempty
参照してください。
どちらの方法も機能的には同等です。以下の事項について言及しているドキュメントはempty()
空であると見なされます
"", 0, 0.0, "0", NULL, FALSE, array(), var $var;
ブール値へのキャストを見ると、リストがリストと一致していることがわかります。つまり、両方のメソッドが同じ方法で異なるタイプを処理します。
2番目の方法は理想的ではありません。2番目の方法を使用して、配列を処理している(そして処理していない)と判断し、それをforeachステートメントに渡すと、エラーが発生します。また、if($ arr)でテストするよりも、チェックしていることについてより有益です。
私の好みは:
if (is_array($arr) && count($arr) > 0) {
//work with array
}
編集:ここでの私の根本的なポイントは、アレイの存在をテストする機能は問題の一部にすぎないということだと思います。$ arrが文字列であることが判明した場合は、より堅牢なチェックが必要です。