Posez votre question Signaler

Php tableau associatif, récupérer noms d'élém [Résolu]

Paul_Wi11iams - Dernière réponse le 9 avril 2008 à 21:37
Bonjour,
C'est le printemps et je fais le grand ménage dans un site.
Pour l'instant, chaque module de php est affublé d'une fonction de déboguage différente.
Chaque fonction de déboguage reçoit en arguement, un tableau associatif d'un même nom, disons $arr, mais les éléments du tableau portent des noms particuliers selon le module en question.
Pour standardiser ce déboguage, je souhaite en faire une fonction unique.
Est-il possible de récupérer les NOMS des éléments d'un tableau ?
A partir de ceci :
<html>
<body>
<?php
$arr=array();
$arr[premier]='un';
$arr[deuxieme]='deux';
$arr[troisieme]='trois';
deboguer ($arr);
/* ======================================= */;
function deboguer ($arg)
{
foreach ($arg as $valeur)
{
/* Ici, ne sais pas obtenir $nomdelement, le nom de l'élément */;
echo '<!- -'.$nomdelement.'=' . $valeur . '- ->
';
} /*fin foreach*/;
} /*fin deboguer*/;
/* ======================================= */;
?>
</body>
</html>
J'aimerais afficher ceci :
<!- - premier=un - ->
<!- - deuxieme=deux - ->
<!- - troisieme=trois - ->
J'ai cherché un moment sur W3 et ailleurs, mais n'ai pas encore vu de solution.
Merci pour toute idée
Paul_Wi11iams.
PS Pour rendre cette question lisible, j'y ai éffacé l'affichage de __line__ avec le nom du module qui en fait appel, un switch pour commander son activation et un décompte de cycles d'affichage.
Lire la suite 
Réponse
+4
moins plus
Bonjour,



$arr=array();
$arr['premier']='un';
$arr['deuxieme']='deux';
$arr['troisieme']='trois';

/* ======================================= */;

foreach ($arr as $k=> $v)
{
/* Ici, ne sais pas obtenir $nomdelement, le nom de l'élément */;

echo $k ."=". $v."<br>";

} /*fin foreach*/;

Ajouter un commentaire
Réponse
+1
moins plus
D'abord, merci Giheller.
Le code (en php 5,5 chez OVH) fonctionne bien tant que le tableau est généré à l'intérieur de la fonction:

$entr_test = array();
$entr_test[dabord]='jkl';$entr_test[ensuite]='mno';$entr_test[finalement]='pqr';
echo 'ENTR+';
foreach ($entr_test as $nom => $valeur)
{
echo $nom.'='.$valeur.' ';
};

En sortie, j'obtiens bien ceci:
ENTR+dabord=jkl ensuite=mno finalement=pqr

Mais dès qu'il s'agît d'une variable en entrée de la fonction en cours, j'obtiens


Warning: Invalid argument supplied for foreach() in /home.32/c/y/b/cyberthe/www/cybedbog.phpon line 49

Les forums le disent, un tel message dans une fonction, vient d'un argument qui n'a pas été perçu comme un tableau.
Pourtant la variable dans la page qui a fait appel à cette fonction l'a bien défini comme tableau, et d'autres tableaux passent très bien dans les arguments ailleurs dans le site.
Au début de la fonction, j'ai même tenté de "forcer" les arguments en tableau par défaut comme ceci :

function cybedbog(entr=array('abc'),$sort=array('def'),$v=array('ghi'))
{ /* le contenu de la fonction qui est décrit ci avant */; };

Le résultat est inchangé…

Avez-vous une idée ?

Paul Williams
Utilisateur anonyme - 9 avril 2008 à 09:52
bonjour,

faites un essai avec :
des guillemets dans les postes du tableau.

$entr_test['dabord']='jkl';$entr_test['ensuite']='mno';$entr_test['finalement']='pqr';

il y apeut être une différence entre php4 et php5 au niveau du passge des variables car un passe les valeurs, l'autre passe les pointeurs.

Répondre
Paul_Wi11iams 5Messages postés mardi 8 avril 2008Date d'inscription 11 avril 2008Dernière intervention - 9 avril 2008 à 21:37
Bonjour,
C'est la suggestion de Giheller qui m'a mis sur la bonne piste, et c'est un détail que j'avais oublié de préciser qui était à l'origine du problème d'un tableau traité comme une variable.
L'argument $entr de la fonction appelante est un tableau qui est déjà passé d'une fonction à une autre fonction (sur trois niveaux !), à partir d'une base Mysql.
Croyant que php était un interpréteur, je ne savais pas qu'il y a une étape de compilation, ce qui fait qu'il n'a pas les données sous la main au moment de préparer.
Il m'a suffi, au début de chaque fonction, de déclarer les tableaux tels
$entr = array(). Du bon vieux COBOL.
Merci encore.
Paul
Répondre
Ajouter un commentaire
Ce document intitulé «  php tableau associatif, récupérer noms d'élém  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.