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]);
}
}
我正在上传一个包含 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]);
}
}