Вот файл CSV:Почему функция fgetcsv() объединяет последовательные EMPTY-поля в поле ONE и помещает их в позицию ОДНОГО блока?
a.csv:
"a","b",,"c",,"d","e","f",,"g","h","i","j",,,,,,,,,,,,,,"k",,,,,,,,,,,,,,,"l","m,n","o"
Теперь в этом CSV файле, ,
является ограничивающим характером между полями. Тоже первое поле является a
, второе поле - b
, третье поле пусто, четвертое поле, пятое поле снова пустое и так далее.
Вот мой пример кода:
index.php:
$file = fopen("a.csv", "r");
while (!(($line = fgetcsv($file, ',', '"')) === false)) {
print_r($line);echo "<br>";
}
ЗАПЛАНИРОВАННЫЕ:
Я ожидал, что этот фрагмент кода, чтобы напечатать что-то вроде :
Array ([0] => a, [1] => b [2] => [3] => c [4] => [5] => d ...so on
OUTPUT I GOT:
Фактический выход я получил:
Array ([0] => a, [1] => b [2] => ,, [3] => c [4] => ,, [5] => d [6] => , [7] => e [8] => , [9] => f [10] => ,, [11] => g [12] => , [13] => h [14] => , [15] => i [16] => , [17] => j [18] => ,,,,,,,,,,,,,, [19] => k [20] => ,,,,,,,,,,,,,,, [21] => l [22] => , [23] => m,n [24] => , [25] => o [26] =>)
ВОПРОС:
Во-первых, почему я получаю те random запятые? Я говорю случайный, потому что, как вы можете видеть, есть запятая после первого элемента
a
, то после второго элементаb
нет запятой, и послеc
нет запятой (или так далее).Для полей, которые не имеют значения, то есть пустого, почему оно объединяет несколько нескольких полей, например. в поле, показанном по индексу
18
, около14
Поля EMPTY были агрегированы и помещены в одно положение массива. Почему? Результатом этого является то, что этот выходной массив должен был содержать 43 элементов, и теперь он содержит 26.
Как исправить эти проблемы и получить ожидаемый результат?
Примечание: Я могу изменить значения разделителя и полей в файле CSV.