PHP: 从二维数组中删除数组

PHP: Delete Array from 2D-Array

我正在上传一个包含 10 列的 CSV file/report,但在 CSV 文件的末尾有几行仅提供有关报告的详细信息,例如

Generated By: XXX

Company Name

Report Run @ 2019-03-14

当我加载数组时,键只是数字(从 0-9),但我想让它成为一个基于列 headers 的关联数组。不幸的是,这对最后几行不起作用,因为数组维度不同(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 有点 'deletes it'。当我遍历数组时,我会执行 if(is_null($row)) continue; 以忽略 NULL 元素。有没有办法真正删除数组?

Array_filter($csv);之后将从您的数组中删除所有 null/false/0。

所以编写自定义函数来仅删除 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]);
    }
}