配列の先頭の要素を取得する関数として array_shift() がある。
ただし、array_shift() は先頭の要素を配列から取り除いてしまうので、「元の配列データを変更せずに」という制約がある場合、array_shift() は使えない。
このような場合、reset() が使える。関数名からは想像が付かないが、reset() は、配列の内部ポインタを先頭の要素に戻し、そして、「配列の最初の要素の値」を返してくれる。
reset() を使えば、元の配列データを変更せず、また、先頭のキーが不明な場合でも、先頭の要素を取得できる。
$array = [
'status_130134' => ['text' => "hi", 'date' => "20200101"]
];
$v = reset($array); // 配列の先頭の要素を取得
var_dump($v);
/* var_dump 出力
array(2) {
["text"]=>
string(2) "hi"
["date"]=>
string(8) "20200101"
}
*/
var_dump($array);
/* var_dump 出力
元の配列データが変更されていないことを確認
array(1) {
["status_130134"]=>
array(2) {
["text"]=>
string(2) "hi"
["date"]=>
string(8) "20200101"
}
}
*/
reset() という関数名と実際の処理の意図が合っていないことで、コードの可読性を懸念する場合、reset() を適当な名前を付けた関数でラップしてもよいだろう。
// reset()をheadという名前を付けた関数でラップ
function head($array)
{
return reset($array);
}
$array = [
'status_130134' => ['text' => "hi", 'date' => "20200101"]
];
$v = head($array); // 配列の先頭の要素を取得
var_dump($v);
/*
array(2) {
["text"]=>
string(2) "hi"
["date"]=>
string(8) "20200101"
}
*/
実際、Laravelのヘルパー関数 head()(配列の先頭の要素を返す関数)は、reset() の返り値を返す関数として実装されている。Laravelのヘルパー関数のソースコードを確認したい場合は、下記のリンクからソースコードを読むことができる。
framework/helpers.php at master · laravel/framework · GitHub