PHPのarray_key_last関数!配列の最後のキーを取得

PHPのarray_key_last関数について書いています。

PHPで配列を扱っている際に、「配列の最後の要素のキーが知りたい」というときに使える関数です。
例えば、ログデータの配列に追加された最新のログのキーを確認したい場合などです。

array_key_last関数はPHP7.3から導入されました。

array_key_last関数とは?

array_key_last関数は、指定した配列の 最後のキー を取得するための関数です。
array_key_first関数と同様に、配列の内部ポインタを移動させることなく、最後のキーの値だけを効率的に取得できます。

基本的な構文

mixed array_key_last ( array $array )

引数

  • $array: 最後のキーを取得したい配列を指定します。

返り値

  • 配列に要素がある場合: 配列の最後のキーを返します。キーは文字列または整数の可能性があります。
  • 配列が空の場合: null を返します。

注意点: この関数はarray_key_first関数と同じく、PHP 7.3.0以降で利用可能です。それより前のバージョンでは使用できません。

array_key_last関数の使い方

実際にarray_key_last関数を使って、配列の最後のキーを取得してみます。

例1:連想配列の場合

<?php

// Webサイトのアクセスログ(一部)を模した連想配列を定義します。
// キーはタイムスタンプ(のようなもの)、値はユーザーIDとします。
$accessLog = [
    '2025-04-14 10:00:01' => 'user_A',
    '2025-04-14 10:05:23' => 'user_B',
    '2025-04-14 10:10:55' => 'user_C' // これが最後の要素
];

// array_key_last関数で、$accessLog配列の最後のキーを取得します。
$lastKey = array_key_last($accessLog);

// 取得したキーを出力します。
echo "最後のキーは: " . $lastKey . "\n"; // 2025-04-14 10:10:55

// 配列全体も表示して、内容が変わっていないことを確認します。
print_r($accessLog);

?>

まず $accessLog という連想配列を定義しています。

次に、array_key_last関数に$accessLog配列を渡して、最後のキーを取得し、変数$lastKeyに代入しています。
echo$lastKeyの内容を出力すると、配列の最後のキーである '2025-04-14 10:10:55' が表示されました。

また、print_r で配列の内容を表示していますが、array_key_last関数を使っても配列の内容や順番は変更されていないことがわかります。

実行結果

最後のキーは: 2025-04-14 10:10:55
Array
(
    [2025-04-14 10:00:01] => user_A
    [2025-04-14 10:05:23] => user_B
    [2025-04-14 10:10:55] => user_C
)

例2:数値添字の配列の場合

数値添字の配列でも同様に動作します。

<?php

// タスクリストを格納した数値添字の配列を定義します。
// キーは自動的に 0, 1, 2 となります。
$tasks = [
    '資料作成', // キーは 0
    'メール返信', // キーは 1
    'コードレビュー' // キーは 2 (最後の要素)
];

// array_key_last関数で、$tasks配列の最後のキーを取得します。
$lastKey = array_key_last($tasks);

// 取得したキーを出力します。
echo "最後のキーは: " . $lastKey . "\n"; // 2
var_dump($lastKey); // 型も確認 (int)

?>

最初に数値添字の配列$tasksを定義しています。
配列の最後の要素'コードレビュー'のキーは2です。

array_key_last関数を使って最後のキーを取得すると、最後のキーの2が返ってきました。
var_dump で型が整数 (int) であることも確認できます。

実行結果

最後のキーは: 2
int(2)

例3:空の配列の場合

array_key_first関数と同様に、空の配列をarray_key_last関数に渡すとnullが返ります。

<?php

// 空の配列を定義します。
$emptyArray = [];

// array_key_last関数で、空の配列の最後のキーを取得しようとします。
$lastKey = array_key_last($emptyArray);

// 取得した結果を出力します。
echo "空の配列の場合: ";
var_dump($lastKey); // NULL

?>

空の配列($emptyArray)には最後のキーが存在しないため、array_key_last関数はnullを返します。

実行結果

空の配列の場合: NULL

end関数 + key関数との違いは?

PHP7.3より前のバージョンでは、配列の最後のキーを取得するために end関数と key関数を組み合わせて使う方法がありました。

<?php

$tasks = [
    '資料作成',
    'メール返信',
    'コードレビュー'
];

// end関数で内部ポインタを末尾に移動させます。
end($tasks);
// key関数で現在のポインタ位置(末尾)のキーを取得します。
$lastKeyOld = key($tasks);

echo "end+keyでの最後のキー: " . $lastKeyOld . "\n"; // 2

?>

この方法も最後のキーを取得できますが、end関数は配列の内部ポインタを末尾に移動させてしまうという副作用があります。

また、array_keys関数で全てのキーを取得し、end関数でその最後の要素を取得する方法もあります。
ですが、配列が大きい場合には全てのキーを一旦配列として取得するため、array_key_last関数に比べて効率が劣る可能性があります。

<?php
$tasks = [
    '資料作成',
    'メール返信',
    'コードレビュー'
];

$keys = array_keys($tasks); // 全てのキー [0, 1, 2] を取得
$lastKeyAlternative = end($keys); // キー配列の最後の要素を取得

echo "array_keys+endでの最後のキー: " . $lastKeyAlternative . "\n"; // 2
?>

array_key_last関数は、これらの代替手段と比べて、内部ポインタを変更せず、かつ効率的に最後のキーを取得できるというメリットがあります。

まとめ

PHP7.3から導入されたarray_key_last関数は、配列の最後のキーを簡単かつ安全に取得できる非常に便利な関数です。

・連想配列、数値添字配列の両方で利用可能です。
・空の配列の場合は`null`を返します。
・配列の内部ポインタを変更しないため、副作用の心配がありません。
・`end` + `key`や`array_keys` + `end`といった代替手段よりもシンプルで効率的な場合があります。
PHP

コメント