2010-11-03 6 views
0

Je ne peux pas obtenir ce pour fonctionner correctement, j'ai besoin du programme pour lister les enregistrements dans le fichier, si $ records [$ row] [2] est le même que le précédent, il devrait répète la classe 'field' avec un nouveau $ records [$ row] [2], sinon il devrait commencer un nouveau #row. S'il vous plaît aider!liste à travers le fichier en utilisant une boucle while

if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) { 


    $prevRow2 = ''; 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 

     $records[] = $data; 

     echo 'Previous'. $prevRow2; 
     echo "<div id=\"row\"><div id=\"num\">" .$row. "</div>"; 

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




    echo "</div>"; 
} 
fclose($handle); 

}

Répondre

0

Tout d'abord, vous semblez supposer que votre fichier CSV est commandé par la colonne que vous voulez groupe sur. Si ce n'est pas le cas, vous devez d'abord lire le fichier, le trier, puis l'imprimer. Si votre fichier CSV n'est pas trop gros pour la mémoire de votre serveur, cela devrait fonctionner.

En outre, votre code a des répétitions et stocker le fichier entier dans un tableau (en fait, comme je l'ai suggéré ci-dessus, mais je ne sais pas si c'est intentionnel). essayer quelque chose comme ceci:

Ceci est mon demo.csv:

"Banana", "yellow" 
"Lemon", "yellow" 
"Orange", "orange" 
"Strawberry", "red" 
"Tomato", "red" 

Ceci est le PHP en boucle à travers elle et la liste par la couleur:

<?php 

if (($handle = fopen('demo.csv', "r"))) { 
    $prev = false; 
    while (($data = fgetcsv($handle, 1000, ","))) { 
     if ($prev !== $data[1]) { 
      $prev = $data[1]; 
      echo '<p><b>' . $prev . '</b></p>'; 
     } 
     echo $data[0] . '<br>'; 
    } 
} 
fclose($handle); 

?> 

Ceci est la sortie en HTML (j'ai ajouté quelques sauts de ligne pour un affichage correct ici)

<p><b>yellow</b></p> 
Banana<br> 
Lemon<br> 
<p><b>orange</b></p> 
Orange<br> 
<p><b>red</b></p> 
Strawberry<br> 
Tomato<br> 

(Si le CSV n'a pas été regroupés par couleur, vous auriez besoin d'un diffe approche loyer.)

+0

Mon fichier CSV est groupé. Voilà ce que je reçois de l'aide de votre code: "jaune" Banana "jaune" citron "orange" orange "rouge" fraise "rouge" tomate Bien que je besoin ressembler à ceci: Chaque fois que le $ data [1] est le même que le précédent, j'ai besoin que cet enregistrement soit groupé avec celui qui le précède. Banana « jaune » citron « jaune » orange « orange » fraise « rouge » tomate « rouge » – MG1

+0

J'ai modifié le code pour essayer de le faire, mais son ne fonctionne toujours pas. Il ne va jamais dans la boucle intérieure. Voici le code: if (($ handle = fopen ('demo.csv', "r"))) { $ prev = false; while (($ data = fgetcsv ($ handle, 1000, ","))) { print 'Comparaison'. $ prev. 'à' . $ data [1]; if ($ data [1] == $ prev) { \t print 'Le précédent est le même
'; \t imprimer 'Prev'. $ prev.'et Current: '. $ data [1]. «
»; $ prev = $ data [1]; \t} \t Imprimer 'Le précédent n'est pas le même
'; \t imprimer 'Prev'. $ prev.'et Current: '. $ data [1]; \t $ prev = $ données [1]; \t \t } } fclose ($ handle); – MG1

+0

J'ai ajouté la sortie que je reçois. C'est différent du tien.Si vous utilisez exactement le même code, vous pouvez regarder dans le jeu de caractères utilisé par votre système d'exploitation et/ou votre version de PHP. – dyve

Questions connexes