假设我的csv文件将获得二维数组,如何将它们放入$array[][]
?
if (($handle = fopen($_SERVER['DOCUMENT_ROOT']."/file.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
$dtary[$d][$c] = $data[$c];
if ($c == $num) {
$d++;
}
}
}
fclose($handle);
}
var_dump($dtary);
我只获得最后一行csv文件。
答案 0 :(得分:1)
根据您的$d
循环条件,for()
无法递增。在$c==$num
时,循环内的代码不会运行。
这是一种实际工作的方法,它提供了不调用count()
或增加计数器的好处。
代码:(Demo)
if(($handle=fopen($_SERVER['DOCUMENT_ROOT']."/file.csv","r"))!==FALSE){
while(($data=fgetcsv($handle,1000,","))!==FALSE){
$inner=[]; // start a fresh inner array
foreach($data as $d){
$inner[]=$d; // build inner array with current row's data
}
$dtary[]=$inner; // push row data as a subarray into result array
}
fclose($handle);
}
var_export($dtary);
虽然我会敦促您实施我的代码段,但如果您想尝试抢救原始代码,可以执行以下操作:
if(($handle=fopen($_SERVER['DOCUMENT_ROOT']."/file.csv","r"))!==FALSE){
$d=0;
while(($data=fgetcsv($handle,1000,","))!==FALSE){
$num=count($data);
for($c=0; $c<$num; $c++){
$dtary[$d][$c]=$data[$c];
}
$d++;
}
fclose($handle);
}
var_dump($dtary);