【发布时间】:2019-08-05 19:55:12
【问题描述】:
我正在上传一个包含 10 列的 CSV 文件/报告,但在 CSV 文件的末尾有几行仅提供有关报告的详细信息,例如
生成者:XXX
公司名称
报告运行@2019-03-14
当我加载数组时,键只是数字(从 0 到 9),但我想让它成为基于列标题的关联数组。不幸的是,这不适用于最后几行,因为数组维度不同(1 vs 10)
这是我的代码:
$csv = array_map('str_getcsv', file($_FILES['file']['tmp_name']));
array_walk($csv, function(&$a) use ($csv) {
if(count($csv[0]) != count($a)) {
$a = null; // Remove the array
} else {
$a = array_combine($csv[0], $a);
}
});
array_shift($csv); # remove column header
当我使用$a = null; 时,它会通过将其替换为NULL 来“删除它”。当我遍历数组时,我会使用 if(is_null($row)) continue; 忽略 NULL 元素。有没有办法真正删除数组?
【问题讨论】:
-
您可以使用
array_filter()不带回调来删除空元素。 -
您能否提供一个包含 5 行数据和所需 PHP 数组结果的示例 CSV?
-
array_filter($csv)实际上并没有删除空值 -
您可能会发现最直接的方法是循环读取文件并仅添加具有完整字段集的行。目前您正在加载文件并至少处理整个文件两次。
标签: php arrays unset array-unset