PHP 7.3 引入了两个新的数组函数 array_key_first 与 array_key_last,分别用于获取数组的第一个元素与最后一个元素的键名。

当使用函数 reset(),end() 和 key() 时,PHP 内核的当前函数只允许通过更改数组的内部状态来检索数组的第一个/最后一个键/值。其他实现方法要么是不可操作的(例如,使用 array_keys($ array)[0] 来收集第一个密钥,如果 $array 是一个空数组,还可能导致错误)或者提供一个增加认知复杂性的构造实现(例如循环)。

为了避免更改内部数组表示以便从数组中收集单个信息并增加用户区代码的可理解性,RFC 为此任务提出了新功能。两个用于处理数组键的函数和两个用于处理数组值的函数:

The current functions of the PHP core only allow to retrieve the first/last key/value of an array by changing the internal state of the array when using the functions reset(), end() and key(). Other implementation approaches are either inperformant (eg. usage of array_keys($array)[0] to gather the first key, which additionally may lead to errors if $array is an empty array) or provide a construct which increases the cognitive complexity of the implementation (eg. usage of loops).

To avoid changes of the internal array representation in order to gather a single information from the array and to increase the comprehensibility of the userland code this RFC proposes new functions for this task. Two functions for the handling of array keys and two functions for the handling of array values:

// 关联数组
$array = ['a' => 1, 'b' => 2, 'c' => 3];
 
$firstKey = array_key_first($array);
$lastKey = array_key_last($array);
 
assert($firstKey === 'a');
assert($lastKey === 'c');
 
// 数值数组
$array = [1 => 'a', 2 => 'b', 3 => 'c'];
 
$firstKey = array_key_first($array);
$lastKey = array_key_last($array);
 
assert($firstKey === 1);
assert($lastKey === 3);
 
// 空数组
$array = [];
 
$firstKey = array_key_first($array);
$lastKey = array_key_last($array);
 
assert($firstKey === null);
assert($lastKey === null);