[PHP] fonction: probleme de debutant

fonction: probleme de debutant [PHP] - PHP - Programmation

Marsh Posté le 08-03-2008 à 00:45:15    

bonjour,
 
je débute en PHP et j'ai quelque souci pour une fonction:
je souhaite créer une fonction qui vérifie si un "nom" est présent dans un tableau et si c'est le cas renvoi la ligne du tableau où est présent le nom.
 
Voici le tableau dans lequel les recherches sont faites:
 

Citation :

<?php
$carnet = array( array("nom"=>"Durand", "prenom"=>"Pierre",
         "tel"=>"0101010101", "ville"=>"Paris" ),
   array("nom"=>"NGuyen", "prenom"=>"Olivier",
         "tel"=>"0606060606", "ville"=>"Lyon" ),
   array("nom"=>"Martin", "prenom"=>"Jeanne",
         "tel"=>"0404040404", "ville"=>"Marseille" ),
   array("nom"=>"Dubois", "prenom"=>"Martin",
         "tel"=>"0600000000", "ville"=>"Paris" ),
   array("nom"=>"Phan", "prenom"=>"Michele",
         "tel"=>"0100000000", "ville"=>"Paris" ),
   array("nom"=>"Duduche", "prenom"=>"Marie",
         "tel"=>"0505050505", "ville"=>"Bordeaux" ),
   array("nom"=>"Dupond", "prenom"=>"Youssouf",
         "tel"=>"0611111111", "ville"=>"Marseille" ),
   array("nom"=>"Delamarre", "prenom"=>"Abdel",
         "tel"=>"0411111111", "ville"=>"Lyon" ) );
?>


 
Et voici mon 'script' php qui ne marche pas:

Citation :

<?php
 
  include("carnet.inc" );
   
 
  function tab_php_to_xhtml ($ligne)          //retourne la ligne du tableau en xhtml
  {
   return "<table><tr> <td>".$ligne['nom']."</td> <td>".$ligne['prenom']."</td> <td>".$ligne['tel']."</td> <td>".$ligne['ville']."</td></tr></table>";
  }
                echo tab_php_to_xhtml($carnet[0]);   //affiche la premiere ligne du tableau.
 
 
 function ligne_du_nom($n)                //devrai retourner la ligne où se trouve le nom passer en argument
  {
 
   for ($i=0;$i<8;$i++) {
    if ($n==$carnet[$i]['nom'])   { return tab_php_to_xhtml($carnet[$i]); }
   }
 
  }
   
   echo ligne_du_nom("Durand");       //n'affiche rien.....


 
 
 
Je ne vois pas où est mon erreur dans la 2eme fonction?...
 
Merci d'avance :) .

Reply

Marsh Posté le 08-03-2008 à 00:45:15   

Reply

Marsh Posté le 08-03-2008 à 02:03:14    

un petit "GLOBAL $carnet;" au début de chaque fonction serait le bienvenue....


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 08-03-2008 à 09:28:29    

Les GLOBAL c'est le mal, mais babasss à raison sur le fond, la variable $carnet n'est dans tes fonctions, ni passée en paramètre, ni déclarée... et donc inconnue.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 08-03-2008 à 11:22:31    

A la place de mettre GLOBAL, tu peux trés bien faire :

Code :
  1. include("carnet.inc" );
  2.  
  3.  function tab_php_to_xhtml ($ligne)          //retourne la ligne du tableau en xhtml
  4.  {
  5.   return "<table><tr> <td>".$ligne['nom']."</td> <td>".$ligne['prenom']."</td> <td>".$ligne['tel']."</td> <td>".$ligne['ville']."</td></tr></table>";
  6.  }
  7.  
  8. echo tab_php_to_xhtml($carnet[0]);   //affiche la premiere ligne du tableau.
  9.  
  10. function ligne_du_nom($n,$carnet)                //devrai retourner la ligne où se trouve le nom passer en argument
  11.  {
  12.   for ($i=0;$i<8;$i++) {
  13.    if ($n==$carnet[$i]['nom'])   { return tab_php_to_xhtml($carnet[$i]); }
  14.   }
  15.  }
  16.  
  17.   echo ligne_du_nom("Durand",$carnet);       //n'affiche rien.....



---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 08-03-2008 à 19:39:34    

Merci pour vos réponses :) .
 
Je comprend un peu mieux les fonction (ou plutôt les déclarations de variables) en PHP maintenant .  
 
Juste une question pourquoi doit on éviter d'utiliser global ?  

Reply

Marsh Posté le 08-03-2008 à 22:12:05    

Parce que global comme son nom l'indique c'est le scope global (dispo partout dans le code bien entendu sauf dans les fonctions/classes).
 
Donc ton problème c'est que la variable n'était pas accessible. Maintenant tu modifies son contenu dans la fonction mais donc dans le reste. Pour une variable dans un contexte particulier ça passe. Si t'as des classes, des fonctions de partout c'est vite le bordel!
 
Et conceptuellement, tu passes un paramètre à une fonction, elle trifouille se qu'elle doit faire et tu récupères ce qu'elle te renvoit. Les modif de pointeurs, références et autres tripotages de l'existant dans un petit coin sombre, c'est les bugs qui arrivent, la fête aux effets de bords ;)
 
Donc essaye de faire propre. A la limite parfois une classe vaut mieux qu'un global, t'accèdes aux propriétés de partout ;)
 
 
Après un cas d'exception peut nécessiter une mesure d'exception ;)

Reply

Marsh Posté le 09-03-2008 à 19:45:15    

Merci pour ce petit cour théorique c'est beaucoup plus clair maintenant :) .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed