我正在上传一个包含 10 列的 CSV 文件/报告,但在 CSV 文件的末尾有几行只提供了有关报告的详细信息,例如
生成者: XXX
公司名称
报告运行 @ 2019-03-14
当我加载数组时,键只是数字(从 0-9),但我想让它成为一个基于列标题的关联数组。不幸的是,这不适用于最后几行,因为数组尺寸不同(1 与 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_walk
会更简单.array_walk
只是将函数应用于数组的每个成员。将其设置为 null 并不意味着它消失了,正如您所看到的,它只是一个 null 值。如果你真的想让它消失,你需要取消设置它。只需按键参考$csv
并取消设置您不想要的那些。
$keys = array_shift($csv);
$expected_count = count($keys);
foreach ($csv as $index => $values) {
if (count($values) == $expected_count) {
$csv[$index] = array_combine($keys, $values);
} else {
unset($csv[$index]);
}
}
Array_filter($csv); 之后将从数组中删除所有 null/false/0。
因此,编写自定义函数以仅删除 null 可能更明智。