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 )
所以简而言之,stream行的解决方法count($array)-1
是有缺陷的。
这是一个线性 ( 最快 )的解决scheme:
end($a); $last_id=key($a);
您可以使用end()函数获取数组中的最后一个元素, array_keys()返回数组键。 混乱。 实际上,它的工作原理是这样的:
$key = end(array_keys($array));
在评论中,信贷转到了hollsk。
您可以使用键($ a)和end($ a)
$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"; }
版画
count: 1 last key: 0 count: 2 last key: 3 count: 3 last key: foo count: 4 last key: 4
如果只处理数组的索引,则最后一个自动生成的索引将始终是数组中最大的数组键。
所以,对于自动生成的索引,使用像max(array_keys($a))
应该工作。
例如,这个:
$a=array(); echo 'res='.($a[]='aaa').' - '.(max(array_keys($a))).'<br>'; echo 'res='.($a[2]='bbb').' - '.(max(array_keys($a))).'<br>'; echo 'res='.($a[]='aaa').' - '.(max(array_keys($a))).'<br>'; die('<pre>'.print_r($a,true).'</pre>');
会得到你:
res=aaa - 0 res=bbb - 2 res=aaa - 3 Array ( [0] => aaa [2] => bbb [3] => aaa )
但请注意,这是不适用于你指定索引的情况…
Bah,看起来我已经find了自己的答案:
$last_id = array_pop(array_keys($a));
在数字键从0到n-1的数组中,我总是使用:
$key = array_push($array, $value)-1;
我估计没有更快或更简单。 如果有人有这样的东西,适用于其他arrays请让我知道。
如果你想索引只是为了获得最后插入的项目。
使用函数,只需使用:
return $array[] = $value;