tri d'un tableau

Eléphant du PHP | 66 Messages

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
Mess With Best or die With the Rest

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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>

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 66 Messages

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 ...
Mess With Best or die With the Rest

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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 )

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 66 Messages

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
Mess With Best or die With the Rest