【PHP】配列の最初と最後の要素を取得する方法|array_key_first/lastと注意点

PHPで「配列の最初の要素」「最後の要素」を取得したい場面はよくあります。やり方は複数ありますが、配列を壊さずに取りたいのか連想配列でも正しく動くかで選ぶべき方法が変わります。この記事では、PHP 7.3以降で使える最も安全な方法を中心に、従来のやり方との違いと注意点を整理します。

この記事の結論:PHP 7.3以降は array_key_first() / array_key_last() が最適です。配列を変更せず、内部ポインタも動かさず、連想配列でも正しく先頭・末尾のキーを取得でき、その値を $arr[$key] で参照できます。
スポンサーリンク

array_key_firstとarray_key_lastを使う(推奨・PHP 7.3+)

array_key_first() は先頭のキーarray_key_last() は末尾のキーを返します。キーが分かれば $arr[$key] で値を取得できます。元の配列を一切変更しないのが最大の利点です。

array_key_first / array_key_last
<?php
$arr = [10, 20, 30, 40, 50];

$firstKey = array_key_first($arr); // 0
$lastKey  = array_key_last($arr);  // 4

echo "最初の要素: {$arr[$firstKey]}\n"; // 10
echo "最後の要素: {$arr[$lastKey]}\n";  // 50

連想配列でも同じように動きます。キーが文字列でも、定義順の先頭・末尾を正しく取得できます。

連想配列でもOK
<?php
$user = ["name" => "佐藤", "age" => 28, "city" => "東京"];

$firstKey = array_key_first($user); // "name"
$lastKey  = array_key_last($user);  // "city"

echo $user[$firstKey]; // 佐藤
echo $user[$lastKey];  // 東京
キーをまとめて扱いたい場合は配列のキーを取得する方法(array_keys)、値だけを取り出したい場合はarray_valuesで配列の全ての値を取得するも参考になります。

reset()とend()で値を直接取る

値そのものを手早く取りたいなら、reset()(先頭)と end()(末尾)も使えます。ただし、これらは配列の内部ポインタを移動させる副作用がある点に注意してください。

reset / end(ポインタを動かす)
<?php
$arr = [10, 20, 30, 40, 50];

$first = reset($arr); // 10(ポインタを先頭へ移動して返す)
$last  = end($arr);   // 50(ポインタを末尾へ移動して返す)

echo "最初: $first / 最後: $last\n";
古い「$values[0] で先頭」という書き方には注意が必要です。これはキーが 0,1,2,… の連番配列でしか正しく動きません。連想配列やキーが飛んでいる配列では $arr[0] が存在せず取得できません。array_values() で振り直せば [0] で取れますが、array_key_first() を使えばその手間なく安全に取得できます。

array_shiftとarray_popは「取り出して削除」

array_shift() は先頭、array_pop() は末尾の要素を取り出すと同時に配列から削除します。「取得しつつ配列から取り除きたい」ときに使い、単に値を見たいだけなら使わないのが鉄則です。

array_shift / array_pop(破壊的)
<?php
$arr = [10, 20, 30, 40, 50];

$first = array_shift($arr); // 10 を取り出す → $arr は [20,30,40,50]
$last  = array_pop($arr);   // 50 を取り出す → $arr は [20,30,40]

echo "取り出した先頭: $first / 末尾: $last\n";
print_r($arr); // [20, 30, 40]
使い分けの目安:配列を変えずに値を見るなら array_key_first/last(または reset/end)、取り出して配列から削除するなら array_shift/array_pop を使います。配列要素の追加は配列に要素を追加する方法を参照してください。

空配列のときの戻り値に注意

要素が0個の配列に対しては、関数ごとに戻り値が異なります。事前に件数を確認しておくと安全です。

関数 空配列のときの戻り値
array_key_first() / array_key_last() null
reset() / end() false
array_shift() / array_pop() null
空配列を事前にチェック
<?php
if (!empty($arr)) {
    $first = $arr[array_key_first($arr)];
}

よくある質問(FAQ)

Q配列を変更せずに最初・最後の要素を取りたいです。
Aarray_key_first() / array_key_last()(PHP 7.3以降)が最適です。キーを取得して $arr[$key] で値を読みます。配列も内部ポインタも変更しません。
Q$array[0] で先頭が取れないことがあるのはなぜ?
Aキーが 0,1,2,… の連番でない配列(連想配列やキーが飛んだ配列)では、$array[0] というキーが存在しないためです。array_key_first() なら、どんな配列でも先頭要素を安全に取得できます。
Qreset()やend()とarray_key_firstの違いは?
Areset() / end() は値を返しますが内部ポインタを動かす副作用があります。array_key_first() / array_key_last()ポインタを動かさずキーを返すため、ループ中などポインタ位置が重要な場面でも安全です。
Q最後の要素を取り出して配列から消したいときは?
Aarray_pop() を使います。末尾要素を返しつつ配列から削除します。先頭なら array_shift() です。値を見るだけのときにこれらを使うと配列が変わってしまうので注意してください。

まとめ

PHPで配列の最初・最後の要素を取得するポイントを整理します。

  • 非破壊で安全なのは array_key_first() / array_key_last()(PHP 7.3+)
  • 値を手早く取るなら reset() / end()(ただしポインタが動く
  • $array[0]連番配列限定で連想配列では使えない
  • 取り出して削除するのは array_shift() / array_pop()(破壊的)
  • 空配列の戻り値は nullfalse。事前に empty() で確認すると安全

関連として、配列に要素を追加する方法配列の要素数をカウントする方法配列のキーを取得する方法もあわせて読むと、PHPの配列操作に強くなれます。