PHP获取数组中最后插入项的索引

时间:2010-07-18 10:05:54

标签: 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>');

写入:

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存在缺陷。

6 个答案:

答案 0 :(得分:67)

以下是linear最快)解决方案:

end($a);
$last_id=key($a);

答案 1 :(得分:20)

您可以将key($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

答案 2 :(得分:18)

您可以使用end()函数获取数组中的最后一个元素,使用array_keys()返回数组键的数组。混乱。在实践中,它的工作原理如下:

$key = end(array_keys($array));

在评论中归功于霍尔斯克。

答案 3 :(得分:2)

如果您只处理数组的数字索引,则最后一个自动生成的索引将始终是该数组的最大数组键。

因此,对于自动生成的索引,使用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
)


但请注意,当您是指定索引的情况时,这将不适用...

答案 4 :(得分:1)

在数字键从0到n-1的数组上,我总是使用:

$key = array_push($array, $value)-1;

我猜它没有更快或更简单。如果某人有类似的东西适用于其他阵列,请告诉我。

答案 5 :(得分:0)

Bah,看起来我自己找到了答案:

$last_id = array_pop(array_keys($a));
相关问题