2012-04-24 3 views
0

テスト配列は、if文

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

は最近、私は誰かが別等を用いる見た場合、私は配列$ ARRをテストするには、この方法を使用して空であります2番目の方法は配列をテストする簡単な方法ではありませんか?

答えて

3

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

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

emptyの詳細については、The Definitive Guide To PHP's isset And emptyを参照してください。

3

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

0

第2の方法は理想的ではありません。 2番目のメソッドを使用して配列を扱っていると判断し、それをforeach文に渡すと、エラーが発生します。また、if($ arr)でテストするよりも、何をチェックしているのかが分かります。

私の好みは次のとおりです。

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

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

+1

'$ arr'が配列(例えば、整数' 1')でない場合、 '!empty($ arr)'もtrueを返します。 –

+0

実際には、空でも理想的でもありません。 +1 – Aaron

1

どちらの方法も機能的に同等です。 empty()のドキュメントには、以下のものがcasting to a boolを見てみると

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

空であると考えられている言及し、我々は両方の方法は、同じように異なる種類を扱う意味し、リストにはリストと一致していることを見ることができます。