Afficher une variable CSV en tableau

Eléphant du PHP | 331 Messages

11 mars 2007, 11:51

Bonjour,

J'ai une variable ($result) qui m'affiche ceci quand je fais un echo de celle ci :
id,timestamp,dest,status,status_text 2702145,2007-03-08 22:01:22,+33611xxxxxx,200,Delivered 2702146,2007-03-08 22:01:24,+33612xxxxxx,200,Delivered
Le résultat ressemble fortement à un CSV puisque les 5 premières valeurs (séparées par des virgules) correspondent à l'entête des colonnes et ensuite j'ai deux lignes d'enregistrement correspondant.

Mon souhait est de décomposer ce que m'affiche cette variable result pour afficher sur ma page les différentes valeurs dans un joli tableau que je souhaite mettre en forme.

Pouvez-vous m'aider et me dire comment vous feriez ?

Merci !

Jay

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 mars 2007, 12:52

Salut,
Soit explode()
soit en un peu plus difficile utiliser des expression régulières
preg_match() (preg_match_all() ... )

/!\ 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 | 331 Messages

11 mars 2007, 12:59

Merci, cependant :

Je suis bien parti sur le explode() mais je n'y arrive pas.
Je ne sais pas quel séparateur prendre en compte pour avoir un array m'affichant les 3 lignes suivantes :

Ligne1 : id,timestamp,dest,status,status_text
Ligne2 : 2702145,2007-03-08 22:01:22,+33611xxxxxx,200,Delivered
Ligne3 : 2702146,2007-03-08 22:01:24,+33612xxxxxx,200,Delivered

En sachant que là il n'y a que 3 lignes mais qu'il peut y avoir beaucoup plus, et dont la quantité n'est pas connue à l'avance.

Une autre piste ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 mars 2007, 16:58

S'il s'agit bien de trois lignes, tu peux utiliser le retour "\n" comme séparateur. Sinon il faut procéder autrement... peut être utiliser l'espace, compter le nombre de virgules et faire un modulo, ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 331 Messages

11 mars 2007, 18:14

Effectivement, c'était bien le retour chariot (/n) qu'il me fallait.
Cependant, je rencontre maintenant un autre problème :

J'ai le code suivant :
<?
$result_q = $sms->sendStatus($idstatus,'queue');
$result_n = $sms->sendStatus($idstatus,'notify');


if (substr($result, 0, 2) == 'KO')
	echo "La requete n'a pas été envoyée correctement<br>".$result;
else
	//on extrait les lignes et les mots et on les affiche dans un tableau
	
//-----------------------------	
?>
<table width="100%" border="0">
<? 
$phrases_n = explode("\n", $result_n);
$i = 0; 
foreach($phrases_n AS $phrase_n)
{ 
    $mot_n = explode(",", $phrase_n);
    $i++;
	$id = $mot_n[0];
	$timestamp_n = $mot_n[1];
	$tel = $mot_n[2];
	$status = $mot_n[3];
	$status_text_n = $mot_n[4];
?>
	
	
      <tr>
        <td><? echo $id;?></td>
        <td><? echo $timestamp_n;?></td>
        <td><? echo $timestamp_q;?></td>
        <td><? echo $tel;?></td>
        <td><? echo $status;?></td>
        <td><? echo $status_text_n;?></td>
        <td><? echo $status_text_q;?></td>
      </tr>
    
<? } ?> 

</table>
Si on regarde de plus près, les deux lignes suivantes me retournent chacune mes fameuses variables au format csv
$result_q = $sms->sendStatus($idstatus,'queue');
$result_n = $sms->sendStatus($idstatus,'notify');
Actuellement, je n'arrive à gérer que le $result_n mais j'aimerais aussi pouvoir gérer dans ma boucle pour affichage dans le même tableau le $result_q.
Je sais d'avance que les deux csv ont le même nb d'enregistrements, ont des champs en commun, si ce n'est qu'il y en a deux de $result_q, que j'aimerais intégrer dans mon tableau final d'affichage.

Merci de me dire comment je peux gérer deux explode dans une même boucle ?

Eléphant du PHP | 331 Messages

11 mars 2007, 21:01

En fait, j'y suis arrivé en faisant ainsi :
<?// on traite d'abord le "queue"
$phrases_q = explode("\n", $result_q); 
$mots_q = array(); 
$i = 0; 
foreach($phrases_q AS $phrase_q) 
{ 
    $mots_q[$i] = explode(",", $phrase_q); 
    $i++; 
} 

//on traite ensuite le "notify"
$phrases_n = explode("\n", $result_n); 
$mots_n = array(); 
$j = 0; 
foreach($phrases_n AS $phrase_n) 
{ 
    $mots_n[$j] = explode(",", $phrase_n); 
    $j++; 
} 

//on rassemble tout ça pour affichage dans un tableau
?>
<table width="100%" border="0" align="center">
	<tr>
		<td bgcolor="#D2DDE3"><div align="center"><strong>Id</strong></div></td>
		<td bgcolor="#D2DDE3"><div align="center"><strong>Id2</strong></div></td>
		<td bgcolor="#D2DDE3"><div align="center"><strong>Destinataire</strong></div></td>
 		<td bgcolor="#D2DDE3"><div align="center"><strong>Heure d'envoi</strong></div></td>
       	<td bgcolor="#D2DDE3"><div align="center"><strong>Heure réception</strong></div></td>
   		<td bgcolor="#D2DDE3"><div align="center"><strong>Statut1</strong></div></td>
   		<td bgcolor="#D2DDE3"><div align="center"><strong>Statut1</strong></div></td>
 	</tr>				  
				
<?php for ($i = 1; $i <= 2; $i++) {?>
 	<tr>
		<td><div align="center"><?php echo $mots_q[$i][0]; ?></div></td>
		<td><div align="center"><?php echo $mots_n[$i][0]; ?></div></td>
		<td><div align="center"><?php echo $mots_q[$i][2]; ?></div></td>
 		<td><div align="center"><?php echo $mots_q[$i][1]; ?></div></td>
		<td><div align="center"><?php echo $mots_n[$i][1]; ?></div></td>
		<td><div align="center"><?php echo $mots_q[$i][4]; ?></div></td>
 		<td><div align="center"><?php echo $mots_n[$i][4]; ?></div></td>
   		</tr>
<?php } ?>
</table>
Par contre, petite question subsidiaire : n'y a t-il pas moyen, quand j'extrais mes phrases, d'effectuer la récupération avec un tri croissant sur le premier mot de chaque phrase ? => de sorte à ce que quand j'assemble ensuite dans mon tableau, les lignes correspondent !

Merci d'avance !