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.

  1. [(#REM)<!-- Récupération d'un tableau en bdd-->]
  2. <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
  3.     #SET{tabMetaAuteur,#VALEUR}
  4. </BOUCLE_recup_tableau>
  5.  
  6. [(#REM)<!-- Boucle sur le tableau  -->]
  7. <ul>
  8.     <BOUCLE_data_tab(DATA){source table, #GET{tabMetaAuteur}}>      
  9.         <li>#CLEF
  10.             <B_data>
  11.                 <ul>
  12.                     [(#REM)<!-- Boucle sur le tableau et toute sa profondeur -->]
  13.                     <BOUCLE_data(DATA){source table, #VALEUR}{' '}>
  14.                         <li>\[#CLE\] => #VALEUR
  15.                             <BOUCLE_recursive_data(BOUCLE_data)>
  16.                              </BOUCLE_recursive_data>
  17.                         </li>      
  18.                     </BOUCLE_data>
  19.                 </ul>
  20.             </B_data>
  21.         </li>
  22.     </BOUCLE_data_tab>
  23. </ul>

Télécharger

Noter l’écriture raccourcie de la boucle de calcul :

  1. <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.

  1. <BOUCLE_recup_tableau(spip_meta){nom = champs_extras_spip_auteurs}>
  2.     <BOUCLE_data(DATA){source table, #VALEUR}{' '}>
  3.         \[#CLE\] => #VALEUR
  4.     <BOUCLE_recursive_data(BOUCLE_data)/>
  5.     </BOUCLE_data>
  6. </BOUCLE_recup_tableau>

Télécharger

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.