2

我想通过数组为字段预设验证规则,例如:

$vals = array(
   'val1' => array(
       'rule' => 'ctype_alnum',
   ),
   'val2' => array(
       'rule' => 'ctype_digit',
   ),
);

如果满足基本验证,这些字段将从 CSV 导入并插入数据库。

例如

$while ($data = fgetcsv....)

$array['val1'] = $data[2];
$array['val2'] = $data[9];
$array['val3'] = $data[11];

我想要做的,我不确定如何准确地做到这一点,现在是交叉引用$array数组与数组中的预设规则$fields。如果任何字段未验证,则该行的导入将中止。

任何想法如何做到这一点?

4

2 回答 2

1

这应该是您需要的:

foreach ($vals as $key => $rule)
{

  if (function_exists($rule['rule']) && !call_user_func($rule['rule'], $array[$key]))
  {
    continue 2;
  }

}
于 2013-03-14T22:57:34.937 回答
1

我看到的问题是,您必须确定如何验证每一列,例如,第 0 列是被验证为字母数字还是数字?另一种方法,为每一列提供验证上下文如下所示:

$columnsDigit = array(0, 3, 7, 8);
$columnsAlnum = array(1, 2, 4, 5, 6);

$while ($line = fgetcsv....) {

    foreach ($line as $column => $value) {

        if ((in_array($column, $columnsDigit)) && (false === ctype_digit($value))) {
            continue 2;
        }

        elseif ((in_array($column, $columnsAlnum)) && (false === ctype_alnum($value))) {
            continue 2;
        }
    }

    // Do something with your valid line
 }
于 2013-03-14T23:16:09.767 回答