Tableau imbriqué... sortir une variable ?
Hello à tous !
je me debrouille avec php en autodidacte, et la je bute sur un probleme a priori simple mais qui dépasse mes maigres compétences...
Avec opencart je recupere une variable produit
en faisant un print_r($produit); j'ai ca:
Array (
[product_id] => 51
[thumb] =>
[name] => Gypsy Jazz
[description] => A Gypsy Jazz style song ! ..
[price] => 19.00€
[special] =>
[tax] =>
[rating] => 0
[reviews] => Based on 0 reviews.
[href] => http://dor-balkans.com/opencart/index.php?route=product/product&path=64&product_id=51
[attribute_groups] => Array (
[0] => Array (
[attribute_group_id] => 8
[name] => Instruments
[attribute] => Array (
[0] => Array (
[attribute_id] => 12
[name] => Acoustic Guitar
[text] => Music with acoustic guitar
)
[1] => Array (
[attribute_id] => 13
[name] => DoubleBass
[text] => Music with doublebass
)
)
)
[1] => Array (
[attribute_group_id] => 7
[name] => Mood
[attribute] => Array (
[0] => Array (
[attribute_id] => 14
[name] => Happy
[text] => Happyyy
)
)
)
[2] => Array (
[attribute_group_id] => 9
[name] => prev
[attribute] => Array (
[0] => Array (
[attribute_id] => 15
[name] => mp3
[text] => acousticheaven15s-prev.mp3
)
)
)
)
)
et je voudrais récupérer le dernier attribut donc acousticheaven15s-prev.mp3
c'est à dire :
dans produit il y a un tableau attribute_groups
dans attribute_groups j'ai un tableau et dans chaque case j'ai un tableau
il me faudrait celui ou name='prev' et recuperer le 'text' de celui la
comment cibler directement cette case ?
je suis obliger de parser avec un for each ? je peux pas faire un truc du genre:
$mp3= $product[attribute_groupe[ 2['prev']['text'] ]
ou un truc du genre ???
oulala je m'embrouille un peu la...
si quelqu'un peu m'aider merci beaucoup !!! :)
Réponses apportées à cette discussion
Salut,
en fait il te faut effectuer deux boucles foreach imbriquées.
Voici la manière de faire, attention aux commentaires du code, ils sont aussi importants que le code lui-même :
/* On initialise une variable à NULL */
$mp3 = null;
/* Dans la première boucle, on va parcourir les groupes d'attributs pour y trouver « prev » */
foreach($produit['attribute_groups'] as $attrgrp)
{
if($attrgrp['name'] == 'prev')
{
/* On a trouvé « prev », donc on va parcourir les attributs de ce groupe pour chercher « mp3 » */
foreach($attrgrp['attribute'] as $attr)
{
if($attr['name'] == 'mp3')
{
/* On a trouvé « mp3 », on peut dès lors récupérer le nom du fichier */
$mp3 = $attr['text'];
/* On a trouvé le fichier, on peut quitter les deux boucles */
break(2);
}
}
}
}
/**
* Si à ce point du code $mp3 vaut toujours NULL, c'est
* qu'on a pas trouvé les éléments recherchés
*/
N'hésite pas à revenir poser des questions si un élément où un autre n'est pas clair.
Hello !! Merci beaucoup pour ta réponse.. c'est un peu ce que j'imaginais et que je voulais éviter de faire..
Vu que tout mes produits ont obligatoirement cette variable à la meme position, j'ai testé un peu et j'ai finalement reussi en ciblant directement :
$url=$product[attribute_groups][2]['attribute'][0]['text'];
je ne connaissais pas cette syntaxe exacte pour cibler les tableaux (oui je sais je suis un peu nul)
Si ca peut servir a d'autres... Merci en tout cas !