【问题标题】:How to filter a date using filter_var_array如何使用 filter_var_array 过滤日期
【发布时间】:2017-02-08 08:37:57
【问题描述】:

我有一个 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 来跳过中间的日期以单独过滤它?我检查了这个doc,但没有日期过滤器。

:::编辑:::

这个呢:

  $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);

请告诉我这是否是一个好的方法。

【问题讨论】:

  • @StuartWagner 我知道要包含更多字段,但我要过滤的数组没有键和值(索引数组)
  • filter_var_array() 需要一个带有字符串键的输入数组。如果您没有这样的密钥,您可能需要一种不同的方法。
  • @StuartWagner 那么为什么这个例子有效:<?php $data = array( 'php', 'javascript', 'programming'); $myinputs = filter_var_array($data,FILTER_SANITIZE_STRING); var_dump($myinputs); ?>
  • 之所以有效,是因为您只指定了一个过滤器,而不是原始代码示例中的一组过滤器。
  • @StuartWagner 请检查编辑

标签: php


【解决方案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);
}

【讨论】:

  • 键名无关紧要,只要每个键名都与关联的过滤器匹配
  • 这很有趣
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
  • 2019-11-21
  • 1970-01-01
  • 2010-12-23
相关资源
最近更新 更多