它与标题听起来一样简单;我需要获取最后插入项目的索引/键。为什么这很难?请参阅下面的两个代码示例:PHP获取数组中最后一个插入项目的索引
$a=array();
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='bbb').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
写入:
res=aaa - 0
res=bbb - 1
res=aaa - 2
Array (
[0] => aaa
[1] => bbb
[2] => aaa
)
当然,这似乎很好地工作,但看到这一点:
$a=array();
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
echo 'res='.($a[2]='bbb').' - '.(count($a)-1).'<br>';
echo 'res='.($a[]='aaa').' - '.(count($a)-1).'<br>';
die('<pre>'.print_r($a,true).'</pre>');
写入:
res=aaa - 0
res=bbb - 1 <- wrong!
res=aaa - 2 <- wrong!
Array (
[0] => aaa
[2] => bbb <- real key
[3] => aaa <- real key
)
因此总之,流行的解决方法count($array)-1
有缺陷。
这确实更快。 – Christian 2012-04-06 21:06:33
不错!如果使用'[]',是否需要'end($)'? – 2013-05-04 15:18:15
不幸的是,一个简单的测试表明,'$ array [] = $ value;'操作不会在数组的末尾设置数组的内部指针。停留在最后一个'reset','next','end'或类似操作设置的位置,或者在位置0,如果它是一个新的数组,并且附加了新的值 – SWilk 2013-05-15 14:18:27