PHP:从 2D 数组中删除数组



我正在上传一个包含 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 可能更明智。

相关内容

  • 没有找到相关文章

最新更新