如何获得数组的最后一个键?
一个解决方案是使用end和key (引用)的组合:
end
key
end()
key()
因此,像这样的一部分代码应该可以做到:
$array = array( 'first' => 123, 'second' => 456, 'last' => 789, ); end($array); // move the internal pointer to the end of the array $key = key($array); // fetches the key of the element pointed to by the internal pointer var_dump($key);
将输出:
string 'last' (length=4)
也就是数组最后一个元素的键值。
完成此操作后,数组的内部指针将位于数组的末尾。正如注释中指出的,你可能想在数组上运行reset()来将指针带回数组的开头。
reset()
尝试使用最后一和中的函数,如下所示:
<?php $array = array( 'one' => 1, 'two' => 2, 'three' => 3 ); echo array_pop(array_keys($array)); // prints three ?>
虽然end()似乎是最简单的,但它不是最快的。更快,更强的替代方法是array_slice():
array_slice()
$lastKey = key(array_slice($array, -1, 1, true));
测试表明,在一个有500000个元素的数组上,它几乎快了7倍!
我更喜欢
end(array_keys($myarr))
只需使用:echo $array[count($array) - 1];
echo $array[count($array) - 1];
不知道这是否会更快,但似乎更容易这样做,你避免错误不传递函数end()…
它只需要一个变量……多写一行代码,然后在需要时取消设置,这不是什么大问题。
$array = array( 'first' => 123, 'second' => 456, 'last' => 789, ); $keys = array_keys($array); $last = end($keys);
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3'); list($last_key) = each(array_reverse($arr)); print $last_key; // key3
$array = array( 'something' => array(1,2,3), 'somethingelse' => array(1,2,3,4) ); $last_value = end($array); $last_key = key($array); // 'somethingelse'
这是因为PHP在内部移动$array的数组指针
我还想为这个问题提供另一种解决方案。
假设所有的键都是数字,没有任何间隙, 我的首选方法是计算数组,然后从该值减去1(以说明数组键从0开始。
$array = array(0=>'dog', 1=>'cat'); $lastKey = count($array)-1; $lastKeyValue = $array[$lastKey]; var_dump($lastKey); print_r($lastKeyValue);
这将给你:
< p > int (1) 猫< / p >
你可以用这个:
$array = array("one" => "apple", "two" => "orange", "three" => "pear"); end($array); echo key($array);
另一个解决方案是创建一个函数并使用它:
function endKey($array){ end($array); return key($array); } $array = array("one" => "apple", "two" => "orange", "three" => "pear"); echo endKey($array);
我只是从Xander那里获得了帮助函数,并使用之前的答案改进了它:
function last($array){ $keys = array_keys($array); return end($keys); } $arr = array("one" => "apple", "two" => "orange", "three" => "pear"); echo last($arr); echo $arr(last($arr));
最好的解决方案,也可以使用内联:
end($arr) && false ?: key($arr)
这种解决方案只是表达式/语句,提供的性能很好,但不是最好的性能。
内联示例用法:
$obj->setValue( end($arr) && false ?: key($arr) // last $arr key );
array_key_last()
$array = ['apple'=>10,'grape'=>15,'orange'=>20]; echo array_key_last ( $array )
将输出
orange
从PHP7.3开始,你可以用< >强array_key_last() < / >强直接访问数组(外层)的最后一个键
这无疑让本页的许多争论告一段落。毫无疑问,它是性能最好的,没有副作用,而且是一种直接、直观、单次调用的技术,可以准确地满足这个问题的要求。
一个粗略的基准测试作为证明:https://3v4l.org/hO1Yf
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015 *测试数组包含500000个元素,微时间重复100x,然后平均,然后乘以1000,以避免科学符号。在@TadejMagajna的回答下注释的初始基准测试归功于@MAChitgarha。
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015
*测试数组包含500000个元素,微时间重复100x,然后平均,然后乘以1000,以避免科学符号。在@TadejMagajna的回答下注释的初始基准测试归功于@MAChitgarha。
这意味着你可以检索最终键的值,而不需要:
这个函数早就应该出现了,它是数组函数工具带中的一个受欢迎的新成员,可以提高性能,避免不必要的副作用,并实现干净/直接/直观的代码。
下面是一个演示:
$array = ["a" => "one", "b" => "two", "c" => "three"]; if (!function_exists('array_key_last')) { echo "please upgrade to php7.3"; } else { echo "First Key: " , key($array) , "\n"; echo "Last Key: " , array_key_last($array) , "\n"; next($array); // move array pointer to second element echo "Second Key: " , key($array) , "\n"; echo "Still Last Key: " , array_key_last($array); }
输出:
First Key: a Last Key: c // <-- unaffected by the pointer position, NICE! Second Key: b Last Key: c // <-- unaffected by the pointer position, NICE!
一些注意事项:
null
array_value_first()
array_value_last()
以下是一些讨论新功能的相关页面:
附注:如果有人正在权衡其他一些技术,你可以参考这个小的比较集:(演示)
Duration of array_slice() + key(): 0.35353660583496 Duration of end() + key(): 6.7495584487915 Duration of array_key_last(): 0.00025749206542969 Duration of array_keys() + end(): 7.6123380661011 Duration of array_reverse() + key(): 6.7875385284424 Duration of array_slice() + foreach(): 0.28870105743408
用array_reverse()试试这个。
array_reverse()
$arr = array( 'first' => 01, 'second' => 10, 'third' => 20, ); $key = key(array_reverse($arr)); var_dump($key);
对于PHP来说,>= 7.3 array_key_last()是获取数组的最后一个键的最佳方法。使用end(), key()和reset()的组合来获取数组的最后一个键是离谱的。
$array = array("one" => bird, "two" => "fish", 3 => "elephant"); $key = array_key_last($array); var_dump($key) //output 3
比较一下
end($array) $key = key($array) var_dump($key) //output 3 reset($array)
如果使用end()和key()的组合,则必须重置数组使指针位于开头
很奇怪,但是这个话题为什么没有这个答案:
$lastKey = array_keys($array)[count($array)-1];
尝试保持与旧版本PHP的兼容性:
$array_keys = array_keys( $array ); $last_item_key = array_pop( $array_keys );