DBなどから配列を取得したとき、配列の要素が空かどうか判断する場面があるかと思います。
そういったときはempty()を使うのか?isset()を使うのか?他に手段があるのか?
ぶっちゃけ答えはどれでもいいと思います。
僕ならempty()を使います。けど狙い通りに動けばどれでもいいでしょ?笑
実際に色々な値を試してみようと思います。
配列の要素が空かどうか判定するのはempty()?isset()?
判定する条件に使う関数も大事ですが、配列と思われる変数の実際の値も重要です。
例えば空の配列か中身のある配列かなんてのは王道です。
でももしかして何かしら配列を返してくれる関数の実行結果にNULLが想定される場合もあります。
配列に1つだけ要素がセットされていて、その要素の値がNULLの場合は?これはまあ大丈夫でしょう(笑)
色々実験してみます。
empty()を使って配列の空判定
empty()は配列が空かを判定するものではなく、引数にセットした変数が空かどうかを判定します。
空の場合には true を返してくれます。
では配列の場合はどうか?実際に動かしてみました。
1 2 3 4 5 6 |
$ary = array(); if (empty($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } |
空の配列を作って判定した結果は予想通り「配列は空」でした。
1 |
配列は空 |
他にも色々パターンを作って実行してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// 配列の要素に文字列がセットされている(通常パターン) $ary = array("あいうえお"); if (empty($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 配列の要素が空文字 $ary = array(""); if (empty($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 配列の要素がnull $ary = array(null); if (empty($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 変数がnull $ary = null; if (empty($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } |
上記コードの実行結果が以下の通りです。
1 2 3 4 |
配列は空ではない 配列は空ではない 配列は空ではない 配列は空 |
通常パターンは当然空では無い判定でしょうが、配列の要素に空文字やNULLを設定した場合も空では無い状態ですね。
それも当然と言えば当然ですが、実際にやってみて結果を得ると安心です。
それと変数にnullがセットされているパターンはもはや配列では無いですが、結果としては想定通りです。
変数が配列で、配列に値がセットされている場合にのみ処理をしたい場合は empty() を使えばよいです。
isset()を使って配列の空判定
ではisset()はどうでしょう?
そもそもisset()は「セットされてる?」という判定になります。
空の判定の逆なイメージですが結果はどうでしょう?
empty()と同じ内容の判定を行ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// 空の配列 $ary = array(); if (isset($ary)) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 配列の要素に文字列がセットされている(通常パターン) $ary = array("あいうえお"); if (isset($ary)) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 配列の要素が空文字 $ary = array(""); if (isset($ary)) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 配列の要素がnull $ary = array(null); if (isset($ary)) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 変数がnull $ary = null; if (isset($ary)) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } |
結果は次のようになります。
1 2 3 4 5 |
配列は空ではない 配列は空ではない 配列は空ではない 配列は空ではない 配列は空 |
空の配列($ary = array())の場合が「配列は空ではない」になってしまいます!!!泣
$ary という変数に対し、空であろうが配列がセットされているでしょう!という結果なんですね。
それ以外の結果は同じですが、一番大事なものがなんか違いましたね。
冒頭で「どっちでもいいw」とか書いてて恥ずかしい。
配列が空かどうかを判定するにはisset()は不向きですね。
他にはどんな方法があるの?
他にはどんな手段があるでしょう?
似たようなのでis_null()というNULLかどうかを判定する関数もあります。
あとは、変数を直接条件文にセットしPHPの機能にお任せする方法がありますね。
どちらも同じように試してみました。
is_null()ではどうか?
これはempty()同様、値が無い場合がtrueになる関数です。
この関数を使って上でやったことと同様に配列の判定をしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// 空の配列 $ary = array(); if (is_null($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 配列の要素に文字列がセットされている(通常パターン) $ary = array("あいうえお"); if (is_null($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 配列の要素が空文字 $ary = array(""); if (is_null($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 配列の要素がnull $ary = array(null); if (is_null($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } // 変数がnull $ary = null; if (is_null($ary)) { echo "配列は空<br />"; } else { echo "配列は空ではない<br />"; } |
結果は次の通りです。
1 2 3 4 5 |
配列は空ではない 配列は空ではない 配列は空ではない 配列は空ではない 配列は空 |
isset()同様に、空の配列($ary = array())の場合が「配列は空ではない」になってしまいますね。
NULLかどうかの判定だからでしょうか。
確かに空の配列ではあるが、NULLではないです。
isset()同様、配列の空判定には不向きですね。
条件文に変数だけセットする場合はどうか?
これはもっと専門用語があるんでしょうか?笑
if文の条件に変数をセットしたとき、値があればtrueで無ければfalseになるものです。
この方法でも同様の実験をしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// 空の配列 $ary = array(); if ($ary) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 配列の要素に文字列がセットされている(通常パターン) $ary = array("あいうえお"); if ($ary) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 配列の要素が空文字 $ary = array(""); if ($ary) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 配列の要素がnull $ary = array(null); if ($ary) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } // 変数がnull $ary = null; if ($ary) { echo "配列は空ではない<br />"; } else { echo "配列は空<br />"; } |
結果は次の通りです。
1 2 3 4 5 |
配列は空 配列は空ではない 配列は空ではない 配列は空ではない 配列は空 |
ぬ??
empty()同様欲しい結果が得られております!
この記事を書くための実験でしたが、僕にとっても勉強になりました。
ただ、個人的にこの条件文の書き方はあまり好きではありません。
なので僕はempty()を使おうかと思います。
まとめ
配列が空かどうかを判定するのはempty()がよさそう。
isset()やis_null()を使うと空の配列の場合に「空で無い」と判定される。
条件文に変数を直接セットする書き方でもempty()同様の結果が得られた。
個人的にはemoty()を使うことをおすすめする。
コメントを残す