Chr*_*ian 52 php arrays indexing
它就像标题听起来一样简单; 我需要获取最后插入项的索引/键.为什么这很难?请参阅以下两个代码示例:
$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>');
Run Code Online (Sandbox Code Playgroud)
写道:
res=aaa - 0
res=bbb - 1
res=aaa - 2
Array (
[0] => aaa
[1] => bbb
[2] => aaa
)
Run Code Online (Sandbox Code Playgroud)
当然,这似乎工作正常,但看到这个:
$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>');
Run Code Online (Sandbox Code Playgroud)
写道:
res=aaa - 0
res=bbb - 1 <- wrong!
res=aaa - 2 <- wrong!
Array (
[0] => aaa
[2] => bbb <- real key
[3] => aaa <- real key
)
Run Code Online (Sandbox Code Playgroud)
简而言之,流行的解决方案count($array)-1存在缺陷.
rom*_*nsh 69
这是一个线性(最快)的解决方案:
end($a);
$last_id=key($a);
Run Code Online (Sandbox Code Playgroud)
Vol*_*erK 21
$a=array();
$a[]='aaa'; foo($a);
$a[3]='bbb'; foo($a);
$a['foo']='ccc'; foo($a);
$a[]='ddd'; foo($a);
function foo(array $a) {
end($a);
echo 'count: ', count($a), ' last key: ', key($a), "\n";
}
Run Code Online (Sandbox Code Playgroud)
版画
count: 1 last key: 0
count: 2 last key: 3
count: 3 last key: foo
count: 4 last key: 4
Run Code Online (Sandbox Code Playgroud)
Sam*_*152 18
您可以使用end()函数获取数组中的最后一个元素,使用array_keys()返回数组键的数组.混乱.在实践中,它的工作原理如下:
$key = end(array_keys($array));
Run Code Online (Sandbox Code Playgroud)
在评论中归功于霍尔斯克.