【发布时间】: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