Answers:
end()
将array的内部指针前进到最后一个元素,并返回其值。 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()
);; 但您正确地指出了该功能,这可能会很有用。
array('a', 'b', 'c', 'd', 'a')
它将返回键0,而不是4
尽管end()
看似最简单,但却不是最快的。更快,更强大的替代方法是array_slice()
:
$lastKey = key(array_slice($array, -1, 1, true));
如测试所示,在具有500000个元素的阵列上,速度快将近7倍!
end($arr);$key = key($arr);reset($arr);
与(b)进行了比较$key = key(array_slice($arr,-1,1,true));
...结果end()
更快了!end()= 0.05326秒,array_slice = 8.506秒...
end()
之所以最快,是因为它可以源自非常简单的C函数,例如:int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
最后一个元素的内部指针。使end()
几乎O(1)。:-)
我更喜欢
end(array_keys($myarr))
end((array_keys($myarr)))
用来绕过通知。
从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
只需使用: echo $array[count($array) - 1];
int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
是有趣,但对您的时间却不利于生意
$a[1] = 1; $a[5] = 5; $a[0] = 0;
,则将具有按顺序排列的键(1、5、0)数组。 count($a)
将产生3 $a[2]
且未定义。它肯定不会给您5的回报。
不知道这是否会更快,但是用这种方法似乎更容易,并且可以通过不将函数传递给end()来避免错误。
它只需要一个变量...再写一行代码就没什么大不了的,然后在需要时取消设置。
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
从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,以避免科学计数法。感谢@MAChitgarha作为@TadejMagajna的回答下评论的初始基准。
这意味着您无需以下操作即可检索最终键的值:
此功能早就应该使用了,它是阵列功能工具带中值得欢迎的功能,它可以提高性能,避免不必要的副作用并启用干净/直接/直观的代码。
这是一个演示:
$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()
)也会提供对书挡元素的无指针访问,但是显然,它们无法获得足够的票数才能生效。以下是一些讨论新功能的相关页面:
ps如果有人在权衡其他一些技术,则可以参考以下比较小集:(Demo)
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_pop和array_keys函数,如下所示:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
对的返回值进行操作array_keys()
,而不对原始数组进行操作。
从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()
我还想为这个问题提供替代解决方案。
假设所有键都是数字,没有任何间隙,我的首选方法是对数组进行计数,然后从该值减去1(以说明数组键从0开始的事实。
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
这将为您提供:
int(1)猫
您可以使用此:
$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);
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
尝试使用array_reverse()
。
$arr = array(
'first' => 01,
'second' => 10,
'third' => 20,
);
$key = key(array_reverse($arr));
var_dump($key);
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
这行得通,因为PHP在$ array内部移动了它的数组指针