Php tableau associatif, récupérer noms d'élém

Résolu/Fermé
Paul_Wi11iams - 8 avril 2008 à 13:15
Paul_Wi11iams Messages postés 5 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 11 avril 2008 - 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.
A voir également:

2 réponses

Utilisateur anonyme
8 avril 2008 à 14:37
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*/;

4
Paul_Wi11iams Messages postés 5 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 11 avril 2008 3
8 avril 2008 à 22:48
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
1
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.

0
Paul_Wi11iams Messages postés 5 Date d'inscription mardi 8 avril 2008 Statut Membre Dernière intervention 11 avril 2008 3 > Utilisateur anonyme
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
0