Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/08/2011, 14h57   #1
Invité régulier
 
Inscription : juin 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 46
Points : 7
Points : 7
Par défaut Accès direct sur un tableau multidimensionnel

Bonjour,

dans le cadre d'un projet, nous bloquons depuis quelques jours sur l'exploitation d'un tableau multidimensionnel. Nous cherchons à accéder à un élément du tableau en passant par plusieurs indices, mais dont le chemin serait créer dans une variable.


Exemple de tableau à exploiter :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$tab = Array
(
    'indice1' => 'valeur1',
    'indice2' => 'valeur3',
    'indice3' => Array
                    (
                        'indice3.1' => 'valeur3.1'
                    )
    'indice4' => Array
                    (
                        'indice4.1' => Array
                                           (
                                               'indice4.1.1' => 'valeur4.1.1'
                                           )
                    )
);
Nous cherchons par exemple à obtenir directement la valeur 'valeur4.1.1' par le chemin $tab['indice4']['indice4.1']['indice4.1.1'], mais dont les indexs serait contenu dans une variable.

Nous avons réussi à accéder aux index de "premier niveau" comme ceci-ci
Code :
1
2
3
    $index='indice1';
    echo $tab{$index};
    //affiche valeur1
mais nous n'arrivons pas (si cela est possible) à accéder aux niveaux inférieurs.

Merci d'avance pour vos réponses.
kebab666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h10   #2
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Bonjour,

$tab[$index]; ?
Si je ne me trompe pas les {} servent pour l'allocation pour pour allez chercher une valeur.
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h13   #3
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Code :
1
2
3
4
5
6
 
$niveau1 = 'indice4';
$niveau2 = 'indice4.1';
$niveau3 = 'indice4.1.1';
 
echo $tab[$niveau1][$niveau2][$niveau3];
?
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h16   #4
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 776
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 776
Points : 2 344
Points : 2 344
Bonjour,

Les {} c'est surtout pour un objet, pas un tableau.
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 16h14   #5
Invité régulier
 
Inscription : juin 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 46
Points : 7
Points : 7
Merci de vos réponses

Citation:
Si je ne me trompe pas les {} servent pour l'allocation pour pour allez chercher une valeur.
Citation:
Les {} c'est surtout pour un objet, pas un tableau.
Merci pour ces précisions, je ne savais pas exactement la subtilité des accolades utilisés dans ce cas là.



Citation:
echo $tab[$niveau1][$niveau2][$niveau3];
Justement, c'est ce type de syntaxe que je cherche à éviter, je voudrais en créer une contenant les [] mais qui soit interprétée comme un chemin d'accès dans le tableau
kebab666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 16h34   #6
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par kebab666 Voir le message
Justement, c'est ce type de syntaxe que je cherche à éviter, je voudrais en créer une contenant les [] mais qui soit interprétée comme un chemin d'accès dans le tableau
La surcharge des opérateurs n'existe pas en PHP, si tu veux créer une méthode plus simple tu dois utiliser une fonction.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 18h41   #7
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Essaie ça :

Code :
1
2
3
4
5
6
7
8
$data = array(...) ; // Ton tableau
$keys = array('indice4', 'indice4.1', 'indice4.1.1') ; // Indexes à parcourir
 
foreach ( $keys as $key ) {
    $data = $data[$key] ;
}
 
print_r($data) ; // 'valeur4.1.1'
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 17h50   #8
Invité régulier
 
Inscription : juin 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 46
Points : 7
Points : 7
Citation:
Essaie ça :
Code :
1
2
3
4
5
6
7
8
$data = array(...) ; // Ton tableau
$keys = array('indice4', 'indice4.1', 'indice4.1.1') ; // Indexes à parcourir
 
foreach ( $keys as $key ) {
    $data = $data[$key] ;
}
 
print_r($data) ; // 'valeur4.1.1'
Merci c'est exactement ce que je cherchais.

J'ai essayé de trouver une fonction permettant de modifier cette valeur, mais cela me semble peut faisable, sauf en reconstruisant un autre tableau et effectuer un array_merge() avec le précédent
kebab666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h53.


 
 
 
 
Partenaires

Hébergement Web