過去の記事 で reset()
を使って配列の先頭要素を取得する方法について書いたが、論理型の値を保持する配列に対しては注意が必要である。
論理型の配列データの先頭要素が false
の場合、reset()
は false
を返すが、reset()
は空の配列に対しても false
を返すため、どちらも同じ false
も得てしまう。
function head($array)
{
return reset($array); // 配列の先頭要素を取得
}
$array1 = [false, true, false];
$array2 = [];
$v1 = head($array1);
var_dump($v1);
/* var_dump 出力
bool(false)
*/
$v2 = head($array2);
var_dump($v2);
/*
bool(false)
*/
var_dump($v1 === $v2);
/*
bool(true)
*/
どちらも false
を得てしまう問題を回避するには、reset()
を呼ぶ際に count()
で配列の要素数を確認するか、key()
の返り値が null
でないことを確認する必要がある。
function head($array)
{
return reset($array); // 配列の先頭要素を取得
}
$array1 = [false, true, false];
$array2 = [];
$v1 = count($array1) ? head($array1) : null;
$v2 = count($array2) ? head($array2) : null;
var_dump($v1 === $v2);
/*
bool(false)
*/
$v1 = !is_null(key($array1)) ? head($array1) : null;
$v2 = !is_null(key($array2)) ? head($array2) : null;
var_dump($v1 === $v2);
/*
bool(false)
*/