如何使用filter_var_array过滤日期

时间:2017-02-08 08:37:58

标签: php

我有一个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);

请告诉我它是不是很好。

1 个答案:

答案 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);
}