Rechercher : dans
Par :

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

Dernière réponse le 9 avr 2008 à 21:37:24 Paul_Wi11iams, le 8 avr 2008 à 13:15:59 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Firefox 2.0.0.13

Meilleures réponses pour « php tableau associatif, récupérer noms d'élém » dans :
Utilisation de l'objet XMLHttpRequest VoirUtilisation de l'objet XMLHttpRequest I - Introduction 1.1 - Quelques mots 1.2 - Techniques pré-requises II - Présentation 2.1 - Principe 2.2 - Utilisation asynchrone 2.3 - Avantages 2.4 - Inconvénients III - Architecture IV - Mise...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...

1

giheller, le 8 avr 2008 à 14:37:18
  • +1

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*/;

JL,  m'enfin c'est juste mon avis @+
se faire aider, n'est pas faire faire son travail

Répondre à giheller

2

Paul_Wi11iams, le 8 avr 2008 à 22:48:16

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_tes­t[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

Répondre à Paul_Wi11iams

3

giheller, le 9 avr 2008 à 09:52:39

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.

JL,  m'enfin c'est juste mon avis @+
se faire aider, n'est pas faire faire son travail

Répondre à giheller

4

 Paul_Wi11iams, le 9 avr 2008 à 21:37:24

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 à Paul_Wi11iams
Collection CommentÇaMarche.net