Si ton tableau est vraiment à quatre niveaux comme ça, cette façon de faire me semble la plus naturelle.
Tu voudrais le mettre à plat d'abord, puisque seules les valeurs du niveau 4 t'intéressent ? Si oui, c'est peut-être que le tableau lui-même était mal conçu au départ ? En tout cas, sans plus d'infos sur ce que c'est et ce que ça fait, on ne peut pas de donner de conseils vraiment pertinents.
Si vous avez des idées autres, je suis preneur.
Le seul truc, c'est que puisque tu n'utilises pas les clés des niveaux 1, 2 et 3, autant ne pas les affecter à des variables :
foreach ($val as $val2) { foreach ($val2 as $val3) { foreach ($val3 as $val4) { foreach ($val4 as $cle4 => $val5) { print $cle4 . "=" . $val5; echo "</pre><hr/>"; } } } } }
J'ai un quantité de boucle qui marche bien. Mais je ne suis pas
certains que c'est une bonne facon de faire.
foreach ($val as $cle1 => $val2) {
foreach ($val2 as $cle2 => $val3) {
foreach ($val3 as $cle3 => $val4) {
foreach ($val4 as $cle4 => $val5) {
(il doit manquer du code ici : accolade ouvrante et balise ouvrante)
Si ton tableau est vraiment à quatre niveaux comme ça, cette façon de
faire me semble la plus naturelle.
Tu voudrais le mettre à plat d'abord, puisque seules les valeurs du
niveau 4 t'intéressent ? Si oui, c'est peut-être que le tableau lui-même
était mal conçu au départ ? En tout cas, sans plus d'infos sur ce que
c'est et ce que ça fait, on ne peut pas de donner de conseils vraiment
pertinents.
Si vous avez des idées autres, je suis preneur.
Le seul truc, c'est que puisque tu n'utilises pas les clés des niveaux
1, 2 et 3, autant ne pas les affecter à des variables :
foreach ($val as $val2) {
foreach ($val2 as $val3) {
foreach ($val3 as $val4) {
foreach ($val4 as $cle4 => $val5) {
print $cle4 . "=" . $val5;
echo "</pre><hr/>";
}
}
}
}
}
Si ton tableau est vraiment à quatre niveaux comme ça, cette façon de faire me semble la plus naturelle.
Tu voudrais le mettre à plat d'abord, puisque seules les valeurs du niveau 4 t'intéressent ? Si oui, c'est peut-être que le tableau lui-même était mal conçu au départ ? En tout cas, sans plus d'infos sur ce que c'est et ce que ça fait, on ne peut pas de donner de conseils vraiment pertinents.
Si vous avez des idées autres, je suis preneur.
Le seul truc, c'est que puisque tu n'utilises pas les clés des niveaux 1, 2 et 3, autant ne pas les affecter à des variables :
foreach ($val as $val2) { foreach ($val2 as $val3) { foreach ($val3 as $val4) { foreach ($val4 as $cle4 => $val5) { print $cle4 . "=" . $val5; echo "</pre><hr/>"; } } } } }
geo75
Genial, merci Oliver. Le tableau est fournit par un web service SOAP, et je n'ai aucune possibilité de le modifier. Meme si la construction me parait mal pensé aussi. Mais bon je ne suis pas assez competent pour critiquer.
Genial, merci Oliver. Le tableau est fournit par un web service SOAP,
et je n'ai aucune possibilité de le modifier. Meme si la construction
me parait mal pensé aussi. Mais bon je ne suis pas assez competent
pour critiquer.
Genial, merci Oliver. Le tableau est fournit par un web service SOAP, et je n'ai aucune possibilité de le modifier. Meme si la construction me parait mal pensé aussi. Mais bon je ne suis pas assez competent pour critiquer.
Si vous avez des idées autres, je suis preneur. Merci d'avance
Salut,
si le format des données l'autorise, tu peux toujours faire quelque chose de récursif (mais c'est plus du domaine de l'exercice de style qu'autre chose) :
function recursive_output($content, $key = '') { if (!is_array($content)) { echo '<pre>'.$key.'='.strval($content).'</pre>'; return; } foreach ($content as $key => $subContent) { recursive_output($subContent, $key); } }
Si vous avez des idées autres, je suis preneur.
Merci d'avance
Salut,
si le format des données l'autorise, tu peux toujours faire quelque
chose de récursif (mais c'est plus du domaine de l'exercice de style
qu'autre chose) :
function recursive_output($content, $key = '') {
if (!is_array($content)) {
echo '<pre>'.$key.'='.strval($content).'</pre>';
return;
}
foreach ($content as $key => $subContent) {
recursive_output($subContent, $key);
}
}
Si vous avez des idées autres, je suis preneur. Merci d'avance
Salut,
si le format des données l'autorise, tu peux toujours faire quelque chose de récursif (mais c'est plus du domaine de l'exercice de style qu'autre chose) :
function recursive_output($content, $key = '') { if (!is_array($content)) { echo '<pre>'.$key.'='.strval($content).'</pre>'; return; } foreach ($content as $key => $subContent) { recursive_output($subContent, $key); } }
Genial, merci Oliver. Le tableau est fournit par un web service SOAP, et je n'ai aucune possibilité de le modifier. Meme si la construction me parait mal pensé aussi. Mais bon je ne suis pas assez competent pour critiquer.
Les dimensions 1 et 2 ont probablement un sens. Dans ce cas, il faudrait voir si c'est pas plus simple de : - faire de la récursivité (imaginons que ton tableau corresponde à une hierarchie de fichiers où les dimensions sont des dossiers, la double boucle semble moins naturelle qu'une fonction qui cherche les fichiers de façon récursive) - faire plusieurs fonctions, une pour chaque dimension (imaginons que le tableau soit une représentation de personnes dans des villes, dans des pays, il me semblerait plus compréhensible d'avoir des fonctions AffichePersonne, AfficheVille, AffichePays, AfficheContinent... AfficheContinent serait la premiere boucle qui se contenterait d'appeler AffichePays, qui serait une boucle qui appellerait AfficheVille... Ca change pas le fait que tu as des boucles imbriquées, c'est juste plus lisible)
-- Vincent
Genial, merci Oliver. Le tableau est fournit par un web service SOAP,
et je n'ai aucune possibilité de le modifier. Meme si la construction
me parait mal pensé aussi. Mais bon je ne suis pas assez competent
pour critiquer.
Les dimensions 1 et 2 ont probablement un sens. Dans ce cas, il faudrait
voir si c'est pas plus simple de :
- faire de la récursivité (imaginons que ton tableau corresponde à une
hierarchie de fichiers où les dimensions sont des dossiers, la double boucle
semble moins naturelle qu'une fonction qui cherche les fichiers de façon
récursive)
- faire plusieurs fonctions, une pour chaque dimension (imaginons que le
tableau soit une représentation de personnes dans des villes, dans des pays,
il me semblerait plus compréhensible d'avoir des fonctions AffichePersonne,
AfficheVille, AffichePays, AfficheContinent... AfficheContinent serait la
premiere boucle qui se contenterait d'appeler AffichePays, qui serait une
boucle qui appellerait AfficheVille... Ca change pas le fait que tu as des
boucles imbriquées, c'est juste plus lisible)
Genial, merci Oliver. Le tableau est fournit par un web service SOAP, et je n'ai aucune possibilité de le modifier. Meme si la construction me parait mal pensé aussi. Mais bon je ne suis pas assez competent pour critiquer.
Les dimensions 1 et 2 ont probablement un sens. Dans ce cas, il faudrait voir si c'est pas plus simple de : - faire de la récursivité (imaginons que ton tableau corresponde à une hierarchie de fichiers où les dimensions sont des dossiers, la double boucle semble moins naturelle qu'une fonction qui cherche les fichiers de façon récursive) - faire plusieurs fonctions, une pour chaque dimension (imaginons que le tableau soit une représentation de personnes dans des villes, dans des pays, il me semblerait plus compréhensible d'avoir des fonctions AffichePersonne, AfficheVille, AffichePays, AfficheContinent... AfficheContinent serait la premiere boucle qui se contenterait d'appeler AffichePays, qui serait une boucle qui appellerait AfficheVille... Ca change pas le fait que tu as des boucles imbriquées, c'est juste plus lisible)
-- Vincent
geo75
Vincent
Bonjour,
J'ai cherché plusieurs solutions dont celle de la fonction recursive qui permet un code plus clair, mais voila quelques soit le code, la valeur qui m'est retourné est le premier caractere de chaque valeurs.
function afficher_tableau($tableau) { foreach ($tableau as $cle => $valeur) { if (is_array($valeur)) { afficher_tableau($valeur); } else { echo $valeur['Telephone'].' <br>'; } } }
Dans cette expleme $valeur['Telephone'] me retourne que les premiers chiffres. Quelque chose a du m'echappter, mais je ne sais pas quoi.
Vincent
Bonjour,
J'ai cherché plusieurs solutions dont celle de la fonction recursive
qui permet un code plus clair, mais voila quelques soit le code, la
valeur qui m'est retourné est le premier caractere de chaque valeurs.
function afficher_tableau($tableau) {
foreach ($tableau as $cle => $valeur) {
if (is_array($valeur)) {
afficher_tableau($valeur);
}
else {
echo $valeur['Telephone'].' <br>';
}
}
}
Dans cette expleme $valeur['Telephone'] me retourne que les premiers
chiffres.
Quelque chose a du m'echappter, mais je ne sais pas quoi.
J'ai cherché plusieurs solutions dont celle de la fonction recursive qui permet un code plus clair, mais voila quelques soit le code, la valeur qui m'est retourné est le premier caractere de chaque valeurs.
function afficher_tableau($tableau) { foreach ($tableau as $cle => $valeur) { if (is_array($valeur)) { afficher_tableau($valeur); } else { echo $valeur['Telephone'].' <br>'; } } }
Dans cette expleme $valeur['Telephone'] me retourne que les premiers chiffres. Quelque chose a du m'echappter, mais je ne sais pas quoi.
geo75
Je viens de voir l'erreur, et j'ai corrigé. cependant j'ai un autre probleme.
Il n'y a pas que ton tableau qui est récursif : lorsque afficher_tableau s'appelle elle-même, cela rajoute un INSERT INTO à chaque coup.
Le probleme c'est que j'ai trois fois INSERT INTO
[...]
Au lieu d'en avoir une seule.
Ben oui. Tu devrais peut-être séparer d'une part la récupération des valeurs $champs et $data (que tu peux faire de façon récursive) et d'autre part l'écriture de la requête (à faire une seule fois à la fin).
Il n'y a pas que ton tableau qui est récursif : lorsque afficher_tableau
s'appelle elle-même, cela rajoute un INSERT INTO à chaque coup.
Le probleme c'est que j'ai trois fois INSERT INTO
[...]
Au lieu d'en avoir une seule.
Ben oui. Tu devrais peut-être séparer d'une part la récupération des
valeurs $champs et $data (que tu peux faire de façon récursive) et
d'autre part l'écriture de la requête (à faire une seule fois à la fin).
Il n'y a pas que ton tableau qui est récursif : lorsque afficher_tableau s'appelle elle-même, cela rajoute un INSERT INTO à chaque coup.
Le probleme c'est que j'ai trois fois INSERT INTO
[...]
Au lieu d'en avoir une seule.
Ben oui. Tu devrais peut-être séparer d'une part la récupération des valeurs $champs et $data (que tu peux faire de façon récursive) et d'autre part l'écriture de la requête (à faire une seule fois à la fin).