PHP 配列の先頭・末尾を取得する

配列の先頭や末尾の要素を取得する方法は複数あります。用途に応じて使い分けが必要です。

先頭の要素を取得

reset() は配列の内部ポインタを先頭に戻し、最初の要素を返します。副作用があるため、単に値を取得したいだけの場合は別の方法を検討します。

$fruits = ['apple', 'banana', 'orange'];

$first = reset($fruits);
echo $first; // apple

PHP 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)の組み合わせで十分です。