【PHP】配列の空判定〜キーが指定されると、値が空でも配列は空と見なされない〜


仕事中にふと気づいたのでメモしておきます。

単純な空の配列は空と見なされます。

<?php
$member = array();

if ($member) {
    echo 'success!';
} else {
    echo 'error!';
}

// 出力結果:error!

しかし、キーが指定され値が空の状態だと、配列自体は空と見なされません。

if (!empty($member2))if (isset($member2))を使用した場合も、同じ判定でした。(こちらは変数の判定ですが。)

<?php
$member2 = array('id' => '', 'name' => '');

if ($member2) {
    echo 'success!';
} else {
    echo 'error!';
}

// 出力結果:success!

ちなみにvar_dumpするとこうなります。
配列自体は存在している・・・という解釈なのでしょうか?

<?php
var_dump($member2);

// 出力結果:
// array(2) {
//   ["id"]=>
//   string(0) ""
//   ["name"]=>
//   string(0) ""
// }

もちろん要素を直接指定すれば、空と判定されます。

<?php
$member2 = array('id' => '', 'name' => '');

if ($member2['id']) {
    echo 'success!';
} else {
    echo 'error!';
}

// 出力結果:error!

こういう間違いがありそうで怖いな〜と思いました。