下面是CSV文件:爲什麼fgetcsv()函數將連續的EMPTY字段聚合到一個字段中,並將其放入一個數組位置?
a.csv:
"a","b",,"c",,"d","e","f",,"g","h","i","j",,,,,,,,,,,,,,"k",,,,,,,,,,,,,,,"l","m,n","o"
現在,在這個CSV文件,,
是字段之間的分隔字符。所以第一個字段是a
,第二個字段是b
,第三個字段是空的,第四個字段是c
,第五個字段是空的等等。
這裏是我的示例代碼:
的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
輸出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] =>)
問題:
首先,我爲什麼會得到那些隨機逗號?我說隨機,因爲,正如你所看到的,在第一個元素
a
之後有一個逗號,那麼在第二個元素b
之後沒有逗號,並且在c
之後沒有逗號(依此類推)。對於沒有值的字段,即哪些字段爲空,爲什麼它聚合了好幾個字段,例如, 在索引
18
所示的字段中,大約14
已將EMPTY字段彙總並放入一個陣列位置。爲什麼?這樣做的結果是,這個輸出數組應該包含43元,而現在它包含26
如何解決這些問題,並得到預期的輸出?
注意:我可以更改CSV文件中的分隔符和字段框值。