它與標題聽起來一樣簡單;我需要獲取最後插入項目的索引/鍵。爲什麼這很難?請參閱下面的兩個代碼示例: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