使用fgetcsv和foreach发布PHP

使用fgetcsv和foreach发布PHP,php,foreach,fgetcsv,Php,Foreach,Fgetcsv,好的,事情是这样的 if (!$fp=fopen($file,"r")) echo "The file could not be opened.<br/>"; while (( $data = fgetcsv ( $fp , 1000 , ',')) !== FALSE ) { // here, var_dump($data); shows the correct array $i = 0;

好的,事情是这样的

if (!$fp=fopen($file,"r")) echo "The file could not be opened.<br/>";  
            while (( $data = fgetcsv ( $fp , 1000 , ',')) !== FALSE ) {
                // here, var_dump($data); shows the correct array
                $i = 0; 
                foreach ($data as $i=>$row ) {  
                   $matrix=explode( ',', $row);
                   // $matrix recieves only the first field of the csv line
                   // seems like I'm getting a field on each foreach iteration
                   // shouldn't I get the whole line each time?
                } //end foreach
            } //end while
如果(!$fp=fopen($file,“r”))回显“无法打开文件。
”; while(($data=fgetcsv($fp,1000,,'))!==FALSE){ //这里,var_dump($data);显示了正确的数组 $i=0; foreach($i=>$row形式的数据){ $matrix=分解(“,”,$row); //$matrix仅接收csv行的第一个字段 //似乎每次迭代我都会得到一个字段 //我不是应该每次都拿到整条线吗? }//结束foreach }//结束时
我看不出这里有什么问题。 顺便说一下,这段代码在我的本地机器上有效,但在我的服务器上无效。两者都是linux,php版本相同

有什么想法吗?谢谢。

fgetscv()将每一行作为数组返回。所以你的问题是:

$data是一行,它已经是一个数组。while()循环中的每次迭代都将返回一行。没有必要爆炸

$allRowsAsArray = array();
if (!$fp=fopen($file,"r")) echo "The file could not be opened.<br/>";  
while (( $data = fgetcsv ( $fp , 1000 , ',')) !== FALSE ) 
{
    $allRowsAsArray[] = $data;
}
print_r($allRowsAsArray); //Will return your entire csv as an array of rows, each row as an array.
$allrowsaarray=array();
如果(!$fp=fopen($file,“r”))回显“文件无法打开。”;
while(($data=fgetcsv($fp,1000,,'))!==FALSE)
{
$allrowsaarray[]=$data;
}
打印($allrowsaarray)//将以行数组的形式返回整个csv,每行以数组的形式返回。

您是否有错误报告?您是否具有读取该文件的正确权限?错误报告处于启用状态,并且我确实具有读取该文件的正确权限。无论如何,我没有错误,我确实读过文件,但是每次迭代我都会得到一个字段,当我认为我应该得到一行的时候。这是我的问题。谢谢。您确定分隔符是逗号而不是分号(;)?您还可以尝试将限制设置为0.5行,并用逗号分隔。两个都试过了,运气都不好。谢谢。嗯,就是这么简单。我不知道我为什么要尝试那个邪恶的代码。非常感谢你。