Comment programmer une fct en PHP

Résolu
Lili_754 Messages postés 137 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
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 :)

9 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    <?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
    1. Lili_754 Messages postés 137 Statut Membre 2
       
      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
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. Lili_754 Messages postés 137 Statut Membre 2
       
      Ouii j'ai rectifié j'ai mis le point virgule apres l'array. Bonne question je sais pas :( peux tu me montrer? :)
      0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. Lili_754 Messages postés 137 Statut Membre 2
       
      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
    2. maka54 Messages postés 721 Statut Membre 80
       
      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
  4. Lili_754 Messages postés 137 Statut Membre 2
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. maka54 Messages postés 721 Statut Membre 80
     
    <?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
    1. Lili_754 Messages postés 137 Statut Membre 2
       
      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
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. Lili_754 Messages postés 137 Statut Membre 2
       
      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
  8. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. Lili_754 Messages postés 137 Statut Membre 2
       
      Ouiii exactement c'que j'aimerai avoir :-)
      0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. maka54 Messages postés 721 Statut Membre 80
       
      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
  10. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    1. Alain_42 Messages postés 5413 Statut Membre 904
       
      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