2

我正在将 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')
)

对此的任何指示都会很棒..!

4

1 回答 1

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',
    );
 });

还更新了验证算法。

于 2013-03-14T10:28:00.910 回答