我想通过数组预设字段的验证规则,例如:
$vals = array(
'val1' => array(
'rule' => 'ctype_alnum',
),
'val2' => array(
'rule' => 'ctype_digit',
),
);
这些字段将从CSV导入并在符合基本验证时插入数据库。
E.g
$while ($data = fgetcsv....)
$array['val1'] = $data[2];
$array['val2'] = $data[9];
$array['val3'] = $data[11];
我想做什么,而且我不确定如何准确地执行此操作,现在使用$array
数组中的预设规则交叉引用$fields
数组。如果任何字段未验证,则此行的导入将被中止。
任何想法如何做到这一点?
答案 0 :(得分:1)
这应该是你需要的:
foreach ($vals as $key => $rule)
{
if (function_exists($rule['rule']) && !call_user_func($rule['rule'], $array[$key]))
{
continue 2;
}
}
答案 1 :(得分: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
}