如何获取数组的最后一个键?
答案 0 :(得分:580)
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()
以将指针返回到数组的开头。
答案 1 :(得分:64)
虽然end()
似乎是最简单的,但它并不是最快的。
更快,更强大的替代方案是 array_slice()
编辑罢工:这项说法没有得到证实 评论中提到了相反的证据。如果有的话 对于这张海报关于速度/效率的断言然后a 必须提供基准测试。
$last_key = key( array_slice( $array, -1, 1, TRUE ) );
答案 2 :(得分:48)
我更喜欢
end(array_keys($myarr))
答案 3 :(得分:31)
自 PHP 7.3 (2018)起,有(最终)功能可以实现: http://php.net/manual/en/function.array-key-last.php
$array = ['apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )
将输出
orange
答案 4 :(得分:29)
只需使用:echo $array[count($array) - 1];
答案 5 :(得分:19)
不知道这是否会更快或更快,但这样做似乎更容易,并且通过不将函数传递给end()来避免错误......
它只需要一个变量......写一行代码并不是什么大不了的事,如果你需要的话就取消设置。
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
答案 6 :(得分:8)
尝试使用array_pop和array_keys功能,如下所示:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
答案 7 :(得分:5)
从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()
的组合,则必须将数组重置为从开头开始的指针。
答案 8 :(得分:5)
从 PHP7.3 开始,您可以使用array_key_last()
直接访问数组(外部)中的最后一个键。这意味着您无需以下操作即可检索最终键的值:
此功能早就应该使用,并且是阵列功能工具带中值得欢迎的功能,它可以提高性能,避免不必要的副作用并启用干净/直接/直观的代码。
这里是demo:
$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!
一些注意事项:
array_key_last()
是array_key_first()的兄弟功能。null
。array_value_first()
和array_value_last()
)也会为书挡元素提供指针无知的访问,但是显然它们无法获得足够的票数才能生效。以下是一些相关页面,讨论了新功能:
答案 9 :(得分:3)
您可以使用:
$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);
答案 10 :(得分:3)
这很奇怪,但是为什么这个主题没有这个答案:
$lastKey = array_keys($array)[count($array)-1];
答案 11 :(得分:3)
我刚接受了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));
答案 12 :(得分:3)
我还想为这个问题提供另一种解决方案。
假设您的所有密钥都是数字的,没有任何间隙, 我首选的方法是计算数组,然后从该值减1(以说明数组键从0开始的事实。
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
这会给你:
INT(1) 猫
答案 13 :(得分:2)
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
答案 14 :(得分:0)
用array_reverse()
试试这个。
$arr = array(
'first' => 01,
'second' => 10,
'third' => 20,
);
$key = key(array_reverse($arr));
var_dump($key);
答案 15 :(得分:0)
答案 16 :(得分:-1)
也可以在线使用的最佳解决方案:
end($arr) && false ?: key($arr)
此解决方案仅是表达/陈述,提供的性能不是最佳的。
内联示例用法:
$obj->setValue(
end($arr) && false ?: key($arr) // last $arr key
);
更新:在PHP 7.3+中:(当然)使用新添加的array_key_last()
方法。
答案 17 :(得分:-1)
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
这是有效的,因为PHP在内部为$ array
移动它的数组指针