[英]Is_Array Issue In Codeigniter Form Validation Callback Function
我在codeiginter表单验证规则中具有以下回调函数:
function validate_milestone($mileStones, $csrf) {
if(is_array($mileStones)) {
foreach ($mileStones as $value) {
}
}
}
这是var_dump
的结果
array (size=3)
0 =>
array (size=3)
'Name' => string 'a' (length=1)
'Amount' => string '50.00' (length=5)
'Type' => string 'AMOUNT' (length=6)
1 =>
array (size=3)
'Name' => string 'b' (length=1)
'Amount' => string '20.00' (length=5)
'Type' => string 'AMOUNT' (length=6)
2 =>
array (size=3)
'Name' => string 'c' (length=1)
'Amount' => string '30.00' (length=5)
'Type' => string 'AMOUNT' (length=6)
如果我从上面的代码中删除了if(is_array())
条件,那么PHP将返回警告“ 为foreach提供了无效的参数 ”。 当我使用var_dump($mileStones)
它给出了变量的数组类型。 那么,此PHP条件在删除警告中的作用是什么?
当您放置is_array()条件时,如果$ mileStones不是数组(在某些情况下是由您未在此处共享的代码的其他部分引起的) ,则仅跳过代码块,因此foreach语句从不执行并被跳过(因此没有警告):
if(is_array($mileStones)) {
echo 'This entire block is skipped when $mileStones is not an array.';
foreach ($mileStones as $value) {
}
}
现在,当您删除is_array()检查时,无论如何都将执行foreach循环,并且由于$ mileStones 不是数组或在某些情况下为空数组 ,将引发内置警告。 试试这个来确认:
if (is_array($mileStones)) {
foreach ($mileStones as $value) {
}
} else {
echo 'Damn, $mileStones is indeed not an array in some weird cases that I need to check now.';
}
注意:我认为您不应该使用is_array()检查,因为它只是忽略了这种情况,并且跳过了所有内置错误处理-使得调试困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.