タイトルのとおりですが、emptyとissetの違いで今さらながらに気づいた部分があったので、メモとして残しておきます。
やりたかったこと
- $hogeが空の配列
- falseにしたい
- $hoge['foo']がtrue
- trueにしたい
- $hoge['foo']がfalse
- falseにしたい
上記の条件を満たしたかった
結論
$hoge = array('foo' => false);
if (!empty($hoge['foo'])) {
echo 'true';
} else {
echo 'false';
}
// falseが表示される
$hoge = array('foo' => false);
if (isset($hoge['foo'])) {
echo 'true';
} else {
echo 'false';
}
// trueが表示される
isset
だと$hoge['foo']
がfalseのときでもtrue
が返ってしまいます…
!empty
だとちゃんとfalse
が返されるんですね〜。
理由
issetの動作
- isset関数は、変数が設定されており、値が
null
でない場合にtrueを返す - false、空文字列、0、空の配列なども「設定されている」とみなされるため、issetはこれらの場合にtrueを返す
emptyの動作
- empty関数は、変数が空(null、false、空文字列、0、0.0、空の配列、または未設定)である場合にtrueを返す
- これらの値でない場合にfalseを返す
上記の違いがあるため、今回は!emptyを使用するとやりたいことが実現できました。
以上、誰からの参考になれれば幸いです。