Php 循环功能不正常

Php 循环功能不正常,php,loops,Php,Loops,我无法使此循环正常运行。每当($records[$row][2]=$prevRow2)我需要它来重新创建class=字段,并且只关闭div=行,它是($records[$row][2]=$prevRow2)所在组的一部分。请帮忙 if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) { $prevRow2 = false; $row=0; while (($d

我无法使此循环正常运行。每当
($records[$row][2]=$prevRow2)
我需要它来重新创建class=字段,并且只关闭div=行,它是
($records[$row][2]=$prevRow2)所在组的一部分。请帮忙

    if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) {
        $prevRow2 = false;
                $row=0;
        while (($data = fgetcsv($handle, 1000, ","))) {
            $num = count($data);
            $records[] = $data;
            echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";
            echo 'Is '. $prevRow2 . 'the same as ' .$records[$row][2];

            if ($records[$row][2] == $prevRow2) {
                for ($c=0; $c < $num; $c++) {
                if ($c != 1) {
                    echo "<div class=\"field\">" . $data[$c] . "</div>";
                    }   
                }

                $prevRow2 = $records[$row][2];
                $row++;
                echo "<div id=\"filler\"></div>";

            }//if close

            else {
                for ($c=0; $c < $num; $c++) {
                    if ($c != 1) {  
                    echo "<div class=\"field\">" . $data[$c] . "</div>";
                    }   
                }
                $prevRow2 = $records[$row][2];
                $row++;
            }//close else           
        echo '</div>';
        }//close while

fclose($handle);
if($handle=fopen($upload/ATLANTA.csv',“r”)!==FALSE){
$prevRow2=假;
$row=0;
而($data=fgetcsv($handle,1000,“,”)){
$num=计数($data);
$records[]=$data;
回显“$行”;
echo'是'.$prevRow2'。与'.$records[$row][2]相同;
如果($records[$row][2]==$prevrrow2){
对于($c=0;$c<$num;$c++){
如果($c!=1){
回显“$data[$c]”;
}   
}
$prevRow2=$records[$row][2];
$row++;
回声“;
}//如果接近
否则{
对于($c=0;$c<$num;$c++){
如果($c!=1){
回显“$data[$c]”;
}   
}
$prevRow2=$records[$row][2];
$row++;
}//关闭其他
回声';
}//近距离
fclose($handle);

}

$row似乎为空,直到生成$row++

对您的数据进行一些输出和/或进一步的描述确实会有所帮助,但我注意到一些事情

1-你的结束if和else做了完全相同的事情,除了这个填充部分。我得到的印象是这不是你想要的,但我真的不太明白,不知道该怎么做

($c=0;$c<$num;$c++)的
{
如果($c!=1){
回显“$data[$c]”;
}   
}
$prevRow2=$records[$row][2];
$row++;
这段代码对于if和else块都是通用的,所以不管发生什么,它都会执行。这就是你想要的吗?如果是这样,您最好将其移出If,只将filler div移到If中,而不将其移到else中

2.$records和$records[$row]的用途是什么。就我所见,$records[$row]===$data每当它被使用时

3-id=行的div在每个while循环结束时关闭。你似乎建议你不要这样做,如果你只在$records[$row][2]AKA$data[2]与上一次迭代匹配时才这样做,我认为你的HTML格式不会很好


4-尝试使用foreach而不是foor循环,看起来公司实际上是索引3,而不是索引2

$prevData3=false;
$row=0;
而($data=fgetcsv($handle,1000,“,”)){
如果($data[2]!=$prevData2)
{
如果($prevData2)回显“”;
回显“$行”;
行++;
}
否则,应以“”为准;
foreach($d数据){
如果($c!=1){
回显“$d”;
}
}
回声“
”; $prevData2=$data[2]; }
回声关闭分区


你应该清理你的代码并相应地缩进它,这伤害了我的眼睛。这并没有阻止它循环。也许没有,但PHP是非常宽容的。您应该设置$row=0;在进入你的循环之前,感谢你的回应。我用来运行函数的文件如下:603405,0,V0123,“CompanyA”,4547.67,10/01/20104547.67 603441,0,V0178,“CompanyB”,15.96,10/01/2010,15.96 603383,0,V023,“CompanyC”,1139.05,10/01/20101139.05 603431,1,V023,“CompanyC”,275.50,10/01/2010275.50我希望根据文件中的每一行打印一行,如果公司名称重复,那么我希望它是同一行的一部分。实际上,我会发布一个新的。你可能想考虑一下这里的形式建议,但是新的答案应该解决问题。我在哪里可以找到新的职位?那么表单建议在哪里呢?我很难在最后添加标签,所以用你知道你不需要使用$records的地方替换CLOSE_DIV,所以我把它拿了出来。for循环被foreach替换,foreach是等效的,工作原理非常相似。如果这是一个新公司:output close div,只要这不是第一次,output open div id=row。不管发生什么情况,输出所有字段。如果这不是一个新公司,则使用id=filler的输出div。结束时。关上吊舱。这几乎可以工作了。。。但不完全如此。它在每一行的末尾结束,而我需要所有具有相同公司名称的行都位于一行内。最后应该打印close row div。这是它现在输出的内容。。我想数据的索引应该是2。搜索并将[3]替换为[2]。查看对“”负责的内容并修复它,它与我给您的代码不同。另外,在foreach后面加上一个
,这样你就有了一些可读性的外观。查看上面编辑的答案
            for ($c=0; $c < $num; $c++) {
            if ($c != 1) {
                echo "<div class=\"field\">" . $data[$c] . "</div>";
                }   
            }
            $prevRow2 = $records[$row][2];
            $row++;
    $prevData3 = false;
    $row=0;
    while (($data = fgetcsv($handle, 1000, ","))) {
        if ($data[2] != $prevData2)
        {
            if ($prevData2) echo '</div>';
            echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>";
            row++;
         }
             else echo "<div id=\"filler\"></div>";
        foreach ($data as $d) {
            if ($c != 1) {
                echo "<div class=\"field\">" . $d . "</div>";
            }
        }
             echo "<br />";
        $prevData2 = $data[2];
    }