Php 迭代数组中的筛选键以用于查询
我的Php 迭代数组中的筛选键以用于查询,php,arrays,post,filter,key,Php,Arrays,Post,Filter,Key,我的$\u POST数组如下所示: array(4){ [4]=> string(0) "" [1]=> string(1) "5" [2]=> string(1) "3" [3]=> string(0) "" } 数组键代表数据库项的ID。所以我想尝试使用ID的键来更新我的数据库 for($db=0; $db<count($_POST); $db++){ if($_POST[$db] != NULL){ $id = ke
$\u POST
数组如下所示:
array(4){
[4]=> string(0) ""
[1]=> string(1) "5"
[2]=> string(1) "3"
[3]=> string(0) ""
}
数组键代表数据库项的ID
。所以我想尝试使用ID的键来更新我的数据库
for($db=0; $db<count($_POST); $db++){
if($_POST[$db] != NULL){
$id = key(current($_POST[$db])); //<-- Problem
$value = $_POST[$db];
// query code
}
}
对于($db=0;$db这里我们正在使用foreach
对这篇$\u POST
进行迭代,希望这会对您有所帮助
将此更改为:
for($db=0; $db<count($_POST); $db++){
if($_POST[$db] != NULL){
$id = key(current($_POST[$db])); <-- Problem
$value = $_POST[$db]));
--- here follows the query ---
}
<?php
if(is_array($_POST) && count($_POST)>0)
{
foreach($_POST as $id=> $value)
{
//$id is your id
//$value is the value on that id
//--- here follows the query ---
}
}
对于($db=0;$db这里我们正在使用foreach
对这篇$\u POST
进行迭代,希望这会对您有所帮助
将此更改为:
for($db=0; $db<count($_POST); $db++){
if($_POST[$db] != NULL){
$id = key(current($_POST[$db])); <-- Problem
$value = $_POST[$db]));
--- here follows the query ---
}
<?php
if(is_array($_POST) && count($_POST)>0)
{
foreach($_POST as $id=> $value)
{
//$id is your id
//$value is the value on that id
//--- here follows the query ---
}
}
for($db=0;$db为什么不使用foreach()
为什么不使用foreach()
与在$\u POST
数组的每次迭代中运行条件检查不同,更好的做法是在循环之前过滤$\u POST
,然后可以在每次迭代中使用(出于安全原因),而不使用任何条件表达式
从示例输入中可以看出,您需要的是空值或数值。此外,数据库表结构通常使用从1
开始的自动递增id
。我将提供3种不同的方法,以便您可以为项目选择最有效的方法。所有方法都保留过滤后,$\u POST
中的原始键(id
)
方法#1:(从$\u POST
中删除所有null、empty、false-y、zero-ish元素)
方法2:(仅允许值大于零的$\u POST
中的元素)
方法#3:(仅允许来自$\u POST
的值为整数的元素)
下面是三种方法的一个示例
此外,在Sahil的回答中还有一些不必要的检查
首先,检查if(is_数组($\u POST))
总是会给出一个true
结果,因为这是一个数组。如果你不相信我,你可以相信deceze的评论,因为他在用户名后面有一颗奇特的钻石。例外是如果你使用内容类型:text/xml
,但这次肯定不是这样
其次,在$\u POST
上检查count()
是不必要的,因为foreach()是如果数组为空,则循环甚至不会迭代一次。与其对$\u POST
数组的每次迭代都运行条件检查,更好的做法是在循环之前过滤$\u POST
,然后您可以在每次迭代中使用您的(出于安全原因),而不使用任何条件表达式
从示例输入中可以看出,您需要的是空值或数值。此外,数据库表结构通常使用从1
开始的自动递增id
。我将提供3种不同的方法,以便您可以为项目选择最有效的方法。所有方法都保留过滤后,$\u POST
中的原始键(id
)
方法#1:(从$\u POST
中删除所有null、empty、false-y、zero-ish元素)
方法2:(仅允许值大于零的$\u POST
中的元素)
方法#3:(仅允许来自$\u POST
的值为整数的元素)
下面是三种方法的一个示例
此外,在Sahil的回答中还有一些不必要的检查
首先,检查if(is_数组($\u POST))
总是会给出一个true
结果,因为这是一个数组。如果你不相信我,你可以相信deceze的评论,因为他在用户名后面有一颗奇特的钻石。例外是如果你使用内容类型:text/xml
,但这次肯定不是这样
其次,在$\u POST
上检查count()
是不必要的,因为如果数组为空,foreach()
循环甚至不会迭代一次。为什么不使用foreach($\u POST as$id=>$value)?foreach($\u POST as$id=>$value)
?感谢大家的评论和回答。现在就可以了!为什么不使用foreach($\u POST as$id=>$value)?foreach($\u POST as$id=>$value)
?感谢大家的评论和回答。现在就可以了!@FabrizioCocco感谢接受我的帖子…欢迎…)@FabrizioCocco感谢接受我的帖子…欢迎…)
foreach(array_filter($_POST,function($v){return $v>0;}) as $id=>$value){
// insert your prepared statement query code block here
}
foreach(array_filter($_POST,function($v){return is_int($v);}) as $id=>$value){
// insert your prepared statement query code block here
}