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;