我做了这个脚本,它基本上抓取了我的“logs”文件夹中的所有文件并将它们全部合并到一个数组文件中,我唯一的问题是,有时如果有空行或空行,脚本就会中断!我怎样才能告诉它自动跳过空白行并转到下一个?空白行不一定位于顶部或底部!可能位于 csv 文件的中间
<?php
$csv = array();
$files = glob('../logs/*.*');
$out = fopen("newfile.txt", "w");
foreach($files as $file){
$in = fopen($file, "r");
while (($result = fgetcsv($in)) !== false)
{
$csv[] = $result;
}
fclose($in);
fclose($out);
}
print json_encode(array('aaData' => $csv ));
?>
这是经过 100% 测试、最简单的方法。解释是空行使 fgetcsv 返回一个非空数组,其中仅包含一个 null 元素。
if ($result[0] == NULL)
continue;
简而言之
$csv = array_map('str_getcsv', file($file_path, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES));
说明
将文件内容读取到数组中。file
将跳过文件中的空行。FILE_SKIP_EMPTY_LINES
会将函数array_map
应用于数组的每个元素。str_getcsv
将解析输入的字符串中的字段str_getcsv
格式化并返回包含字段的数组。csv
了解更多关于 str_getcsv
了解更多有关文件
的信息了解更多关于 array_map
当前接受的答案不考虑多列,其中额外的空行看起来更像
,,,,,
,而不仅仅是NULL
。
要捕获空的单列案例和多列空案例,您可以执行以下操作:
while (($result = fgetcsv($in)) !== false) {
if (empty(array_filter($result))) {
continue; // Skip this iteration
}
}
使用
array_filter
过滤掉所有空值,然后我们检查过滤后的数组是否为空(如果整行都是空值,就会出现这种情况)