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

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)

  • 不幸的是,它是.一个简单的测试表明,`$ array [] = $ value;`操作不会在数组末尾设置数组的内部指针.它停留在最后一次`reset`,`next`,`end`或类似的操作设置它.或者在位置0,如果它是一个新数组,并附加新值. (2认同)
  • 在我看来这是件好事.您可以遍历$ array并同时向其添加更多值.对不起题. (2认同)

Vol*_*erK 21

你可以使用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";
}
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)

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

  • -1你不应该将值传递给`end`.这提出了严格的警告.正确答案是VolkerK给出的答案:`end($ array); 键($阵列);`. (8认同)
  • 当然可以.$ key = end(array_keys($ array)); (6认同)
  • @ Sam152不,`end`通过引用获取数组.您不能通过引用直接传递函数的结果,因此警告. (4认同)

Usm*_*med 1

只有一小行:

$last_key = array_key_last($a);
Run Code Online (Sandbox Code Playgroud)

PHP 官方文档