Codeigniter表单验证回调函数中的Is_Array问题

时间:2015-02-23 10:53:56

标签: php codeigniter foreach

我的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条件在删除警告中的作用是什么?

1 个答案:

答案 0 :(得分:0)

当您放置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()检查,因为它只是忽略了这种情况,所有内置的错误处理都被忽略了 - 使调试变得困难。