PHP 配列の先頭・末尾を取得する
配列の先頭や末尾の要素を取得する方法は複数あります。用途に応じて使い分けが必要です。
先頭の要素を取得
reset() は配列の内部ポインタを先頭に戻し、最初の要素を返します。副作用があるため、単に値を取得したいだけの場合は別の方法を検討します。
$fruits = ['apple', 'banana', 'orange'];
$first = reset($fruits);
echo $first; // applePHP 7.3 以降は array_key_first() でキーを取得し、そこからアクセスする方法が推奨されます。
$fruits = ['a' => 'apple', 'b' => 'banana'];
$firstKey = array_key_first($fruits);
$first = $fruits[$firstKey];
echo $first; // apple末尾の要素を取得
end() は配列の内部ポインタを末尾に移動し、最後の要素を返します。
$fruits = ['apple', 'banana', 'orange'];
$last = end($fruits);
echo $last; // orange同様に PHP 7.3 以降は array_key_last() が使えます。
$fruits = ['apple', 'banana', 'orange'];
$lastKey = array_key_last($fruits);
$last = $fruits[$lastKey];
echo $last; // orange取り出して削除する
先頭または末尾の要素を配列から取り除きながら取得する場合は、array_shift() と array_pop() を使います。
array_shift()
先頭の要素を取り出して削除する。残りの要素は再インデックスされる。
array_pop()
末尾の要素を取り出して削除する。キーは維持される。
$fruits = ['apple', 'banana', 'orange'];
$first = array_shift($fruits);
echo $first; // apple
print_r($fruits); // ['banana', 'orange']
$last = array_pop($fruits);
echo $last; // orange
print_r($fruits); // ['banana']パフォーマンスの注意
array_shift() は残りの要素を再インデックスするため、大きな配列では遅くなります。キューのような FIFO 処理には SplQueue を使う方が効率的です。
一方 array_pop() は末尾を削除するだけなので高速です。スタックのような LIFO 処理には array_pop() と array_push()(または value)の組み合わせで十分です。