tri d'un tableau

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : tri d'un tableau

par nejme.eddinne » 10 août 2006, 09:17

Bonjour
J'ai pris votre code, il ne m'a pas rien affiché :?
mais j'ai trouvé la solution ma tt était sur le point de s'exploser :P
pour un fichier csv:
1;a;entr;10
1;a;sort;2
2;f;entr;5
2;f;---;4
2;f;sort;6
3;t;sort;9
3;t;entr;55
<?
$fichier=fopen("test.csv",'r');
$contenu=fread($fichier,filesize("test.csv"));
	$lignes=explode("\n",$contenu);
	//print_r($lignes);
	
	for($i=0;$i<sizeof($lignes);$i++)
	{
		$lignes[$i]=explode(";",$lignes[$i]);
	}
		sort($lignes,0);
			$i=1;
			$trv=0;
			$pntg=0;
			//echo sizeof($lignes);
			while($i<sizeof($lignes))
			{
			
				for($k=$i;$k<=sizeof($lignes);$k++)
				{
					if($lignes[$i][0]!=$lignes[$k][0])
					{
					$trv=$k;
					break;
					
					}
				
				}

				
				for($j=$i;$j<$trv;$j++)
				{
				
				
					if($lignes[$j][2]=="sort")
					$sortie=$lignes[$j][3];

					if($lignes[$j][2]=="entr")
					$entree=$lignes[$j][3];
				
				
				}
				
				
				if($entree!="" || $sortie!="")
				{
				$tab[$i]=array("id"=>$lignes[$i][0],"Nom"=>$lignes[$i][1],"entree"=>$entree,"sortie"=>$sortie);
				$pntg++;
				}
				

				$entree="";
				$sortie="";
								
			$i=$trv;
			}
			
			echo " <table>
			<tr> <td> Id </td> <td> Nom </td> <td> Entree </td> <td> Sortie </td> </tr>";
			foreach($tab as $value)
			{
			echo "<tr> <td>".$value["id"]." </td> <td> ".$value["Nom"]." </td> <td> ".$value["entree"]." </td> <td> ".$value["sortie"]." </td> </tr>";
			}
			echo "</table>";
		
?>
le principe était de découpé le tableau en sous tableau et travailler sur ces parties ceci me donnera:
Id Nom Entree Sortie
1 a 10 2
2 f 5 6
3 t 55 9
merci bien

par Truc » 08 août 2006, 12:48

Bonjour
Merci, mais la lecture du fichier csv c pas un prblm je peux le lire mm en faisant
(...)
mon prblm c que je peux avoir des doublons de la mm personne, mais une pour l'entree et l'autre pour la sortie, parfois il n'ya que l'entrée ...
Evite le langage sms qui n'est pas pratique pour la lecture :wink:

As tu travaillé avec le code proposé ? (j'ai pas testé ce que ça donne mais il ne doit pas être si loin de la verité :-k )

par Cyrano » 08 août 2006, 10:00

:idea: Crée la ligne complète avec une valeur par défaut ("--") et en faisant le tour du fichier d'origine, mets à jour les valeurs au fur et à mesure.

par nejme.eddinne » 08 août 2006, 09:18

Bonjour
Merci, mais la lecture du fichier csv c pas un prblm je peux le lire mm en faisant:
<?
$fichier=fopen('fichier.csv','r');
$contenu=fread($fichier,filesize('fichier.csv'));
$lignes=explode('\n',$contenu);
$champs=explode(';',$lignes);
?>
mon prblm c que je peux avoir des doublons de la mm personne, mais une pour l'entree et l'autre pour la sortie, parfois il n'ya que l'entrée ...

par Truc » 07 août 2006, 20:57

Salut,

Faudrait commencer par lire le fichier avec fgetcsv() puis construire un tableau à deux dimensions (par exemple) :
$tab = array();
boucle $ligne = fgetcsv()
{
    if(!isset($tab[$ligne[0]])) // si l'élément n'existe pas on crée l'entrée
   {
      $sous_tab = array();
      $sous_tab["id"] = $ligne[0];
      $sous_tab["nom"] = $ligne[1];
      $sous_tab["date"] = $ligne[2];
      $sous_tab["entree"] = $ligne[3];
      $tab[$ligne[0]]= $sous_tab;
   }
   else // sinon on ajoute juste l'heure de sortie au meme élément
     $tab[$ligne[0]]= array("sortie"=>$ligne[3]); 
}
Pour verifier le contenu du tableau
<pre>
<?php print_r($tab); ?>
</pre>

tri d'un tableau

par nejme.eddinne » 07 août 2006, 19:29

Bonsoir
J'ai un fichier CSV, de cette forme:
id | Nom | date | heure | code_presence
contenu
18 | abcd | 06/08/2006 | 8:00 | Entree
32 | lkjkk | 06/08/2006 | 8:05 | Entree
23 | ldlllld | 06/08/2006 | 9:00 | Entree
18 | abcd | 06/08/2006 | 16:00 | Sortie
23 | ldlllld | 06/08/2006 | 15:30 | Sortie
je veux le rendre de cette façon
id | nom | date | entree | sortie
contenu
18 | abcd | 06/08/2006 | 8:00 | 16:00
32 | lkjkk | 06/08/2006 | 8:05 | --
23 | ldlllld | 06/08/2006 | 9:00 | 15:30
qq1 peut m'aider ?? !!
Merci