Ok,
我知道所有关于array_pop(),但它删除了最后一个元素。如何获得数组的最后一个元素而不删除它?
这里有一个奖励:
$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
甚至
$array = array('a', 'b', 'c', 'd');
unset($array[2]);
echo $array[sizeof($array) - 1]; // Output: PHP Notice: Undefined offset: 2 in - on line 4
要获取数组的最后一个元素,使用:
$lastElement = array_slice($array, -1)[0];
基准
我迭代了1,000次,分别获取包含100个和50,000个元素的小型和大型数组的最后一个元素。
Method: $array[count($array)-1];
Small array (s): 0.000319957733154
Large array (s): 0.000526905059814
Note: Fastest! count() must access an internal length property.
Note: This method only works if the array is naturally-keyed (0, 1, 2, ...).
Method: array_slice($array, -1)[0];
Small array (s): 0.00145292282104
Large array (s): 0.499367952347
Method: array_pop((array_slice($array, -1, 1)));
Small array (s): 0.00162816047668
Large array (s): 0.513121843338
Method: end($array);
Small array (s): 0.0028350353241
Large array (s): 4.81077480316
Note: Slowest...
我使用的是PHP 5.5.32版本。
上面的答案很好,但是正如@paul-van-leeuwen和@quasimodos-clone所提到的,PHP 7.3将引入两个新函数来直接解决这个问题——array_key_first()和array_key_last()。
您现在就可以通过以下polyfill(或shim)函数开始使用此语法。
// Polyfill for array_key_last() available from PHP 7.3
if (!function_exists('array_key_last')) {
function array_key_last($array) {
return array_slice(array_keys($array),-1)[0];
}
}
// Polyfill for array_key_first() available from PHP 7.3
if (!function_exists('array_key_first')) {
function array_key_first($array) {
return array_slice(array_keys($array),0)[0];
}
}
// Usage examples:
$first_element_key = array_key_first($array);
$first_element_value = $array[array_key_first($array)];
$last_element_key = array_key_last($array);
$last_element_value = $array[array_key_last($array)];
注意:这需要PHP 5.4或更高版本。
PHP 7.3版引入了函数array_key_first和array_key_last。
由于PHP中的数组不是严格的数组类型,即从索引0开始的固定大小字段的固定大小集合,而是动态扩展的关联数组,因此处理具有未知键的位置很困难,而且变通方法执行得不好。相比之下,实数组将通过指针算术在内部快速寻址,并且在编译时通过声明已经知道最后一个索引。
至少从7.3版开始,第一个和最后一个位置的问题已经通过内置函数解决了。这甚至可以在没有任何警告的情况下对数组字面量开箱即用:
$first = array_key_first( [1, 2, 'A'=>65, 'B'=>66, 3, 4 ] );
$last = array_key_last ( [1, 2, 'A'=>65, 'B'=>66, 3, 4 ] );
显然,最后一个值是:
$array[array_key_last($array)];