我有一个csv文件,其中包含格式如下的行:
Name;timestamp;floatValue
该文件超过20000行,我想过滤每行的每个值。我尝试使用此代码:
$args=array(FILTER_SANITIZE_STRING,FILTER_VALIDATE_INT,FILTER_VALIDATE_FLOAT);
while (($line = fgetcsv($handle, 1024, ";")) !== FALSE) {
$testing = filter_var_array($line,$args);
var_dump($testing);
}
我收到此错误:
filter_var_array(): Numeric keys are not allowed in the definition array
所以我在这里有两个问题:
filter_var_array
DateTime::CreateFromFormat
在separetly之后过滤它?我检查了这个doc,但没有日期过滤器。::: EDIT :::
这个怎么样:
$data = array(
'name' => $line[0],
'timestamp' => $line[1],
'value' => $line[2]);
$args=array(
'name' => FILTER_SANITIZE_STRING,
'timestamp' => FILTER_VALIDATE_INT,
'value' => FILTER_VALIDATE_FLOAT);
$testing = filter_var_array($data,$args);
var_dump($testing);
请告诉我它是不是很好。
答案 0 :(得分:1)
filter_var_array
适用于关联数组,而不是数字,
您必须通过添加关联键来转换数组
$args = array('string' => FILTER_SANITIZE_STRING, 'int' => FILTER_VALIDATE_INT, 'float' => FILTER_VALIDATE_FLOAT);
$keys = array('string', 'int', 'float');
while (($line = fgetcsv($handle, 1024, ";")) !== FALSE) {
$testing = filter_var_array(array_combine($keys, $line), $args);
var_dump($testing);
}