PHP: Удалить массив из 2D-массива - PullRequest
0 голосов
/ 14 марта 2019

Я загружаю файл / отчет в формате CSV с 10 столбцами, но в конце файла 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.Есть ли способ действительно удалить массив?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Я думаю, что это проще без array_walk.array_walk просто собирается применить функцию к каждому члену массива.Установка его в нуль не означает, что он пропал, просто он имеет нулевое значение, как вы видели.Если вы действительно хотите, чтобы это ушло, вы должны сбросить его.Просто обратитесь к $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]);
    }
}
0 голосов
/ 14 марта 2019

array_filter ($ CSV);впоследствии удалит все null / false / 0 из вашего массива.

Так что может быть разумнее написать пользовательскую функцию для удаления только null.

...