我正在将CSV文件的某些值读入数组,并且我想在将每行插入MySQL数据库之前对每个值运行一些基本的验证检查。我想知道如何有效地执行此操作,使用某种规则数组。
例如,我只想要CSV的每一行中某些位置的值
$while ($data = fgetcsv....)
$val1 = $data[2];
$val2 = $data[9];
$val3 = $data[11];
我想验证每个val - 如果任何val没有验证,将中止插入
if (ctype_alnum($val1) AND ctype_alnum($val2) AND is_numeric($val3))
上面的方法在处理大约30个值时开始看起来非常低效,所以我想知道是否有办法通过创建一个存储所需值位置的数组以及验证规则来改进它。像下面的东西......
$vals = array(
'val1' => array('pos' => 2, 'rule' => 'ctype_alphanum')
)
关于此的任何指示都会很棒..!
答案 0 :(得分:1)
我不知道您需要在数组中使用pos
元素,但是对于其他部分,您可以查看此内容。如果需要更复杂的话,可以相应地改变它
$vals = array(
'val1' => array(
'rule' => 'ctype_alnum',
),
'val2' => array(
'rule' => 'ctype_digit',
),
);
function print_out( $val )
{
echo '<pre>';
var_dump( $val );
echo '</pre>';
}
print_out( $vals );
array_walk( $vals, function( &$value, $key ){
$result = call_user_func( $value['rule'], $value['value'] );
$value['result'] = $result;
});
print_out( $vals );
<强>更新强>
$var = fgetcsv(...);
在这里你从csv获得一行
$neededRange = array_slice( $var, $x[, $n] );
通过这种方式,您将获得所需的部分。
因为我看到你只需要一个规则来处理所有元素。
array_walk( $array, function( &$value, $key ){
$value = array(
'value' => $value,
'rule' => 'ctype_alnum',
);
});
还更新了验证算法。