Parcourir un tableau multidimensionnel à l’aide de boucles
Avec la nouvelle version de spip3 il est possible de boucler sur des tableaux [1].
Un bon exemple pour récuperer des tableaux multidimensionnels est la table spip_meta. Les plugins insèrent souvent des données sous forme de tableaux multidimensionnels sérialisés [2] pour sauvegarder leur configuration.
La boucle ci-dessous va récupérer le tableau php stocké en bdd.
Ce tableau va être affecté à la variable tabMetaAuteur, puis passé en "critère" de boucle.
On effectue une boucle sur les valeurs puis une boucle récursive [3] a l’intérieur de celle-ci qui va descendre dans toute la profondeur du tableau.
[(#REM)<!-- Récupération d'un tableau en bdd-->]
<BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
#SET{tabMetaAuteur,#VALEUR}
</BOUCLE_recup_tableau>
[(#REM)<!-- Boucle sur le tableau -->]
<ul>
<BOUCLE_data_tab(DATA){source table, #GET{tabMetaAuteur}}>
<li>#CLEF
<B_data>
<ul>
[(#REM)<!-- Boucle sur le tableau et toute sa profondeur -->]
<BOUCLE_data(DATA){source table, #VALEUR}{' '}>
<li>\[#CLE\] => #VALEUR
<BOUCLE_recursive_data(BOUCLE_data)>
</BOUCLE_recursive_data>
</li>
</BOUCLE_data>
</ul>
</B_data>
</li>
</BOUCLE_data_tab>
</ul>
Noter l’écriture raccourcie de la boucle de calcul :
<BOUCLE_recursive_data(BOUCLE_data)/>
Il est possible d’éviter une boucle et d’arriver au même résultat avec le code ci-dessous.
<BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
<BOUCLE_data(DATA){source table, #VALEUR}{' '}>
\[#CLE\] => #VALEUR
<BOUCLE_recursive_data(BOUCLE_data)/>
</BOUCLE_data>
</BOUCLE_recup_tableau>
Une solution encore plus rapide et d’utiliser print_r($array) de php en guise de filtre :’).
[(#GET{tabMetaAuteur}|unserialize|print_r{1})]
À noter que le tableau doit être désérialisé contrairement au critère de boucle DATA qui accepte les 2 formats.