0

我有一个动态生成的表格,列出了给定组中的所有用户,每个用户的姓名旁边都有一个复选框。组管理员可以选择/取消选择这些复选框以包含/排除用户。在 MySQL 表中,每个用户都有一个状态列,即 a0或 a 1。我使用隐藏值来处理框的未选中状态,并将数据作为数组发布,每个用户的唯一 ID 作为键。

所以我的 POST 数据是一个这样的数组:

Array ( [105] => 1 [106] => 1 [107] => 0 [108] => 0 [109] => 1 )

现在,我需要更新数据库。这是我希望查询的外观:

INSERT INTO users (uid,status) VALUES (105,1),(106,1),(107,0),(108,0),(109,1)
ON DUPLICATE KEY UPDATE status=VALUES(status);

当然,这不会 INSERT 任何内容,但它会使用单个查询更新每一行。

我想不通的是如何使用数组来生成查询。特别是考虑到用户数量(数组中的项目数)会有所不同。


经过进一步研究,我的问题似乎可以归结为:

是否可以implode用来转动这个数组:

Array ( [105] => 1 [106] => 1 [107] => 0 [108] => 0 [109] => 1 )

进入这个字符串:

(105,1),(106,1),(107,0),(108,0),(109,1)

可以灵活地在数组中包含更多或更少的项目?

4

1 回答 1

3

使用foreach循环,您可以将数组转换为字符串,如下所示:

foreach( $array as $key => $value ) {

$queryString .= "($key,$value), ";

}

然后,您可以使用rtrim()从查询中删除逗号,如下所示:

rtrim( $queryString, "," )

或者通过在你的 foreach 循环中设置一些计数函数来仅在它不是数组中的最后一项时附加一个逗号。

您的最终查询将如下所示:

INSERT INTO users (uid,status) VALUES $queryString ON DUPLICATE KEY UPDATE status=VALUES(status);
于 2013-04-13T20:20:09.300 回答