Comment programmer une fct en PHP

Résolu/Fermé
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 - 5 févr. 2013 à 15:27
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 17 févr. 2013 à 09:48
Bonjour,

Je cherche à écrire une fonction PHP vect_to_tableHTML qui prend en paramètre un tableau PHP, et qui retourne une table HTML listant ligne à ligne tous ses éléments.

Merci de m'aider car je ne sais pas comment on creer une fonction en php
Voici mon debut de code
$Coordonnee = array(
'prenom'=> 'Lila'
'nom' => 'Du'
'adresse' => '4 rue Dodo'
'ville' => 'paris'
'tel' => '0146453423');

function vect_to_tableHTML($array){
foreach ($Coordonnee as $information => $donnee){
echo "<table border='1'>";
echo "<tr> <th> $information </th>";
echo "<td> $donnee </td>";
echo "</tr>";
echo "<table>";
Je sais pas du tout si cela est correcte, please aide moi :)
A voir également:

9 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 7/02/2013 à 11:12
<?php 
   ///// fonctions php 
//tu peux mettre la fct au début du code c'est plus lisible si elles sont toutes regroupées au début 
function vect_to_tableHTML($array){ 
//ici dans la fct il faut utiliser le nom de l'argument c a d $array 
//et mettre <table> en dehors de la boucle sinon tu vas avoir autant de tables que de lignes 
 echo "<table border='1'>"; 
 foreach ($array as $information => $donnee){  
  //une ligne tr par ligne de l'array  
  echo "<tr> <th> $information </th>"; 
  echo "<td> $donnee </td>"; 
  echo "</tr>";   
 } 
 echo "<table>";  
} 
   //initialisation de l'array 
$Coordonnee = array( 
'prenom'=> 'Lila' 
'nom' => 'Du' 
'adresse' => '4 rue Dodo' 
'ville' => 'paris' 
'tel' => '0146453423'); 


   //appel de la fonction 
vect_to_tableHTML($Coordonnee); //en lui passant en argument l'array $Coordonnee
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
7 févr. 2013 à 21:29
Mercii beaucoup!! Par contre je rencontre un souci au niveau de l'affichage, toutes les ligne de ma premiere colonne sont en gras alors que moi je souhaite seulement avoir en gras toute les colonne de ma premiere ligne.

Mercii d'avance :)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
8 févr. 2013 à 13:38
tu as du modifier qq chose car chez moi j'ai bien seulement la première colonne en gras
par contre tu as oublié les virgule lors de la definition de l'array:
 //initialisation de l'array 
$Coordonnee = array( 
'prenom'=> 'Lila', 
'nom' => 'Du',
'adresse' => '4 rue Dodo', 
'ville' => 'paris', 
'tel' => '0146453423'); 


autre question comment fias tu pour rentrer dans ton array une autre personne

car ton affichage est plutôt inversé, nom, prenom etc devraient être en titre de colonnes et le svaleurs dans les lignes en dessous
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
9 févr. 2013 à 13:07
Ouii j'ai rectifié j'ai mis le point virgule apres l'array. Bonne question je sais pas :( peux tu me montrer? :)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 févr. 2013 à 14:03
il manqait les virgules dans l'array.

un exemple:

<?php 
		///// fonctions php 
function vect_to_tableHTML($array){ 
	 echo "<table border='1'>"; 
	 //affichage de la ligne titre
	 echo '<tr><th>prenom</th><th>nom</th><th>adresse</th><th>ville</th><th>telephone</th></tr>';
	 foreach ($array as $index_1 => $donnee){	
		  //affichage des donnes une ligne tr par ligne de l'array 
			echo '<tr>';
			//colonnes
		  echo '<td>'.$donnee['prenom'].'</td><td>'.$donnee['nom'].'</td><td>'.$donnee['adresse'].'</td><td>'.$donnee['ville'].'</td><td>'.$donnee['tel'].'</td>'; 
		  echo '</tr>';   
	 } 
	 echo "<table>";  
} 
  
  //////initialisation de l'array 
   /*
   on va faire un array à deux dimensions
   premiere dimension: index 0, 1 ,2 etc, coorespondant à chaque personne
   deuxième dimension: pour chaque index 0,1,2  on aura un array avec omme index prenom, nom etc.. correspondant aux donnees de chaque personne
   */
$Coordonnee[0] = array( 
'prenom'=> 'Lila', 
'nom' => 'Du',
'adresse' => '4 rue Dodo', 
'ville' => 'paris', 
'tel' => '0146453423'); 
$Coordonnee[1] = array( 
'prenom'=> 'Annie', 
'nom' => 'Dupuy',
'adresse' => '2 av de Paris', 
'ville' => 'Roissy', 
'tel' => '0121345697'); 
$Coordonnee[2] = array( 
'prenom'=> 'Pierre', 
'nom' => 'Dupont',
'adresse' => 'Place bellecourt', 
'ville' => 'Lyon', 
'tel' => '0438965421'); 
//etc pour les autres personnes

   /////appel de la fonction 
vect_to_tableHTML($Coordonnee); //en lui passant en argument l'array $Coordonnee
?>
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
9 févr. 2013 à 15:04
a ouii c'est vrai j'ai eu un message d'erreur je l'avais corrigé apres, merci. En faite on me demande de traiter les ligne et les colonne de façon dynamique. Je souhaite avoir juste dans ma premiere colonne tout mes <th> donc j'ai fais ce-ci:
function vect_to_tableHTML($array){
echo "<table border='1'>";
echo "<tr>";
foreach ($array as $information => $donnee){
echo "<th> $information </th>";
#echo "<tr> <td> $donnee </td></tr>";
}
echo "</tr>";

echo "<table>";

}

Mon souci c'est pour mes td comment faire pour qu'il s'associe parfaitement à la colonne dont la $donnee correspont??
0
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
9 févr. 2013 à 15:20
function vect_to_tableHTML($array = array()){ 
	?>
	<table border="1">
		<thead>
			<tr>
			<?php foreach(array_keys($array[0]) as $key){ ?>
				<th><?php echo $key; ?></th>
			<?php } ?>
			</tr>
		<thead>
		</tbody>
		<?php foreach ($array as $line){ ?>
			<tr>
				<?php foreach ($line as $element){ ?>
				<td><?php echo $element; ?></td>
				<?php } ?>
			</tr>
		<?php } ?>
		</tbody>
	</table>
	<?php 
	} 
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
9 févr. 2013 à 15:38
function vect_to_tableHTML($array){
echo "<table border='1'>";
echo "<tr>";
foreach ($array as $information => $donnee){
echo "<th> $information </th>";
}
echo "</tr>";
foreach ($array as $information => $donnee){
echo "<tr>";
foreach ($array as $information => $donnee){
echo "<td> $donnee </td>";
}
echo "</tr>";
}


echo "<table>";

}
J'ai suivi l'algorithme, maintenant je n'ai plus le souci de la donnee mise dans la bonne colonne, mon seul souci c'est que ça boucle autant que j'ai de colonne, c'est à dire il m'affiche 5 fois mes donnees dans 5 lignes differentes..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
Modifié par maka54 le 9/02/2013 à 15:45
<?php 
class vect_to_tableHTML {

	
	public $table;
	
	function _construct(){
		$this->table = '';
	}
	
	function thead($keys){
		$this->table .= '<thead><tr>';
		foreach($keys as $key){ 
			$this->table .= '<th>'.$key.'</th>';
		} 
		$this->table .= '</tr></thead>';
	}
	
	function tbody($elemnts){
		$this->table .= '<tr>';
		foreach($elemnts as $elt){ 
			$this->table .= '<td>'.$elt.'</td>';
		} 
		$this->table .= '</tr>';
	}
	
	function generate($array = array()){
		$this->table = '<table border="1">';
		if(is_array($array[0])){ // alors 2 dimensions ou plus
			$this->thead(array_keys($array[0]));
			foreach($array as $line){
				$this->tbody($line);
			}
		}else{	// un seule dimension
			$this->thead(array_keys($array));
			$this->tbody($array);
		}
		$this->table .= '</table>';
		
		return $this->table;
	}
	
}

	$Coordonnee[0] = array( 
	'prenom'=> 'Lila', 
	'nom' => 'Du',
	'adresse' => '4 rue Dodo', 
	'ville' => 'paris', 
	'tel' => '0146453423'); 
	$Coordonnee[1] = array( 
	'prenom'=> 'Annie', 
	'nom' => 'Dupuy',
	'adresse' => '2 av de Paris', 
	'ville' => 'Roissy', 
	'tel' => '0121345697'); 
	$Coordonnee[2] = array( 
	'prenom'=> 'Pierre', 
	'nom' => 'Dupont',
	'adresse' => 'Place bellecourt', 
	'ville' => 'Lyon', 
	'tel' => '0438965421'); 
	

	$vect = new vect_to_tableHTML();
	$tab2 = $vect->generate($Coordonnee); // tableau a 2 dimension
	$tab1 = $vect->generate($Coordonnee[0]); // tableau a 1 dimension
	
	echo $tab1;	
	echo $tab2;

	
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
9 févr. 2013 à 16:52
Il y a pas une facon plus simple que de faire appel à des fonctions, il me semble qu'on y ait presque le truk se joue dans la seconde boucle...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 févr. 2013 à 19:58
le problème n'est pas dans l'appel de la fonction, tel qu'on te l'a fait c'est bon.

le problème est dans le code la fonction elle même.
Donnes nous un exemple de tableau que tu veux obtenir avec 3 personnes par exemple
titres en haut des colonnes ou au début des lignes ?
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
9 févr. 2013 à 22:08
par exemple je souhaite un affichage de type

echo "<table border=\"1\">";
echo "<tr>";
echo "<th> nom </th>";
echo "<th> prenom </th>";
echo "<th> adresse </th>";
echo "<tr> <td> lili </td>";
echo "<td> popo </td>";
echo "<td> 4, rue bobo </td> </tr>";
echo "<tr> <td> trutru </td>";
echo "<td> nolo </td>";
echo "<td> 54, rue du chomage </td> </tr>";
echo "</table>";

Mais mon souci vient au niveau de du deuxieme foreach de la fonction je pense...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
10 févr. 2013 à 15:02
ne nous donnes pas le code mais un exemple de page résultat

ex:

prenom nom adresse ville telephone
lili Du 4 rue bobo Paris 012345678
Nanie Dupont 5 place vendome Paris 061236879
Fred Astaire rue Frere Lyon 04789654123
0
Lili_754 Messages postés 125 Date d'inscription mercredi 18 avril 2012 Statut Membre Dernière intervention 31 mai 2016 2
16 févr. 2013 à 11:51
Ouiii exactement c'que j'aimerai avoir :-)
0
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
16 févr. 2013 à 14:48
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 févr. 2013 à 14:51
c'est déjà ce que je t'avait fait qqs post plus haut revoici le code:
<?php 
		///// fonctions php 
function vect_to_tableHTML($array){ 
	 echo "<table border='1'>"; 
	 //affichage de la ligne titre
	 echo '<tr>';
	 foreach($array[0] as $titre=>$value){
		//les titres de chaque colonne
		echo '<th>'.$titre.'</th>';
	 }
	 echo '<tr>';
	
	//affichage des lignes de valeurs du tableau
	 foreach ($array as $index_1 => $donnee){	
		  //affichage des donnes une ligne tr par ligne de l'array 
			echo '<tr>';
			//colonnes
		  echo '<td>'.$donnee['prenom'].'</td><td>'.$donnee['nom'].'</td><td>'.$donnee['adresse'].'</td><td>'.$donnee['ville'].'</td><td>'.$donnee['tel'].'</td>'; 
		  echo '</tr>';   
	 } 
	 echo "<table>";  
} 
  
  //////initialisation de l'array 
   /*
   on va faire un array à deux dimensions
   premiere dimension: index 0, 1 ,2 etc, coorespondant à chaque personne
   deuxième dimension: pour chaque index 0,1,2  on aura un array avec omme index prenom, nom etc.. correspondant aux donnees de chaque personne
   */
$Coordonnee[0] = array( 
'prenom'=> 'Lila', 
'nom' => 'Du',
'adresse' => '4 rue Dodo', 
'ville' => 'paris', 
'tel' => '0146453423'); 
$Coordonnee[1] = array( 
'prenom'=> 'Annie', 
'nom' => 'Dupuy',
'adresse' => '2 av de Paris', 
'ville' => 'Roissy', 
'tel' => '0121345697'); 
$Coordonnee[2] = array( 
'prenom'=> 'Pierre', 
'nom' => 'Dupont',
'adresse' => 'Place bellecourt', 
'ville' => 'Lyon', 
'tel' => '0438965421'); 
//etc pour les autres personnes

   /////appel de la fonction 
vect_to_tableHTML($Coordonnee); //en lui passant en argument l'array $Coordonnee
?>
0
maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
16 févr. 2013 à 15:54
En faite on me demande de traiter les ligne et les colonne de façon dynamique


dans ton foreach tu fait réfèrence au nom des champs , donc ce n'est pas dynamique , si demain on veux faire la meme chose sur un tableau completement différent çà ne fonctionnera pas .
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 févr. 2013 à 20:18
alors tu va m'expliquer comment faire cela de façon plus dynamique que ce que je t'ai fait ?

mon foreach génère justement les noms des colonnes qui permettent de générer même si demain ton array est différent

essayes par exemple de faire un array en rajoutant un champ sexe et un champ nationalité
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 févr. 2013 à 09:48
maka54, excuses je croyait que c'était le demandeur qui posait cette question.
Dans mon post plus haut effectivement ce n'est pas dynamique au niveau des titres, je n'avais pas copier /collé le bon code.
0