当前位置: 首页 > 面试题库 >

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

桂和同
2023-03-14
问题内容

就像标题听起来一样简单。我需要获取最后插入的项的索引/键。为什么这很难?请参见以下两个代码示例:

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


问题答案:

这是一个线性( 最快的 )解决方案:

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


 类似资料:
  • 问题内容: …并且该手册似乎表明您可以随时拨打电话,并且可以正常使用。但是这个… …似乎说明它必须在事务内。所以我的问题是:我可以在查询之前(只要没有交易)就等我想要的时间吗?面对许多并发连接,这可靠吗? 问题答案: PostgreSQL中的INSERT,UPDATE和DELETE具有RETURNING子句,这意味着您可以执行以下操作: 然后查询将为插入的每一行返回它为id插入的值。将往返保存到服

  • 问题内容: 到目前为止,这是我的JavaScript代码: 当前,它需要URL中数组的倒数第二个项目。但是,我想检查数组中的最后一项是否正确,如果是,请改为抓取倒数第三项。 问题答案: 如果您的服务器为“ index.html”和“ inDEX.htML”提供相同的文件,则您也可以使用:。 但是,如果可能的话,您可能要考虑在服务器端进行此操作:它将更加干净并且可以在没有JS的情况下使用。

  • 问题内容: 我有一个经常插入新数据的表。我需要获取表的最后一个ID。我怎样才能做到这一点? 类似于吗? 问题答案: 如果您使用的是PDO,请使用。 如果您使用的是Mysqli,请使用。 如果您仍在使用Mysql: 请不要在新代码中使用函数。它们不再维护,已正式弃用。看到 红色框了 吗?了解 准备的语句 来代替,并使用 PDO 或库MySQLi -本文将帮助你决定哪些。如果您选择PDO,这是一个很好

  • 问题内容: 我有一个查询,我想插入最后一个ID。字段ID是主键,并且是自动递增的。 我知道我必须使用以下语句: 该语句适用于如下查询: 但是,如果我想使用以下语句获取ID: 我收到此错误: 我究竟做错了什么? 问题答案: 那是因为那是SQL函数,而不是PHP。您可以使用。 喜欢: 如果要使用SQL而不是PDO API进行操作,则可以像普通的select查询一样进行操作:

  • 问题内容: 是否有任何选项可以获取CodeIgniter中新记录的最后插入ID? 考虑字段id(自动递增)firstcolumn和secondcolumn的表组成。 这样,您可以在以下代码中使用插入ID。 问题答案: 真可惜 我看了一下用户指南,第一个功能是 这也适用于activerecord插入… 编辑:我更新了链接

  • 问题内容: 我有一个表字段类型varchar(36),我想由mysql动态生成它,所以我使用了以下代码: 插入记录后如何立即检索生成的uuid? 问题答案: 更好 你不能。唯一的解决方案是执行2个独立的查询: 其中$ uuid是第一步中获取的值。