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`といった代替手段よりもシンプルで効率的な場合があります。
コメント