PHP、empty($array)で条件分岐する時にarray_filter関数を使う

PHPで、

$hoge = array();
$hoge["huga"] = null;

print_r($hoge);

のような配列を作成すると、

Array
(
    [huga] => 
)

以上のような「値自体は入ってないんだけどキーはある」みたいな配列ができます。

これを使って「配列の中身に値があるかどうか」という意図で条件分岐したい時はemptyをそのまま使ってしまうと、

$hoge = array();
$hoge["huga"] = null;

print(!empty($hoge)); // => true

結果は「true」、配列に中身が存在するということになってしまいます。 こういう値自体はないのにキーのみ存在するような連想配列は取り除いておいた方がいいかもしれません。

$hoge = array();
$hoge["huga"] = null;

$hoge = array_filter($hoge); // 追加
print(!empty($hoge)); // => false

とすると良いかと思います。

しかし、ネストが深い場合だとarray_filterでは除けないので注意が必要です。

$hoge = array();
$hoge["huga"] = array(
    "piyo" => null
);

print_r($hoge); 
// => Array
// (
//     [huga] => Array
//         (
//             [piyo] =>
//         )
// 
// )

$hoge = array_filter($hoge);
print(!empty($hoge)); // => true