SPIP

[ar] [ast] [bg] [br] [ca] [co] [cpf] [cs] [da] [de] [en] [eo] [es] [eu] [fa] [fon] [fr] [gl] [id] [it] [ja] [lb] [nl] [oc] [pl] [pt] [ro] [ru] [sk] [sv] [tr] [uk] [vi] [zh] Espace de traduction

Descarregar

#ARRAY

Agost de 2009 — mis à jour le : Agost de 2010

Totes les versions d’aquest article:

L’etiqueta #ARRAY pot contenir una matriu PHP, és a dir, un conjunt de parelles clau/valor, que volem emmagatzemar per tornar-les a utilitzar en el conjunt de l’esquelet.

La matriu ha d’estar declarada per l’etiqueta #SET i pot, a continuació, ser recuperada per l’etiqueta #GET [1].

Pot ser utilitzada a continuació, entre altres coses, associada al criteri IN d’un bucle.


Declarar una matriu i recuperar-ne els valors

-  #SET{mon_tableau, #ARRAY{cle1,valeur1,cle2,valeur2}}
crea la variable mon_tableau i li assigna una matriu PHP com a valor, que es podria representar d’aquesta manera:

ClausValors
cle1 valeur1
cle2 valeur2

No és necessari envoltar les cadenes de caràcters amb cometes simples o dobles, excepte quan vulguem especificar una cadena buida que escriurem ’’

-  Amb finalitats de proves, podem visualitzar la matriu gràcies al filtre |foreach.

[(#GET{mon_tableau}|foreach)] mostrarà:

  • cle1=> valeur1
  • cle2=> valeur2

-  El valor associat a una clau determinada es pot recuperar utilitzant el filtre |table_valeur:

[(#GET{mon_tableau}|table_valeur{cle1})] retorna valeur1.

-  Verificar la presència d’un valor a la matriu amb el filtre |find [2]:

Omplir una matriu dinàmicament

Un interès de les taules és la d’omplir-les dinàmicament, pels resultats d’un o diversos bucle(s).

Llavors, la matriu s’ha de declarar per un #SET abans del bucle: #SET{mon_tableau,#ARRAY}

En el bucle, un nou #SET redefineix mon_tableau a cada iteració: el recuperem per #GET i s’hi afegeix un nou valor gràcies als filtres |push o |array_merge.

L’ordre dels valors de la matriu dependrà dels criteris d’ordre del bucle.

-  |push afegeix simplement un valor al final de la matriu. La clau s’indexa automàticament: s’incrementa d’1 a cada repetició del bucle i i aquest, a partir de 0 (la primera clau és 0, després 1, 2, 3,...).

Exemple: crear una matriu mots_choisis que continguin les #ID_MOT de totes les paraules clau lligades a un article.

Si les paraules lligades a aquest article tenen els números 4, 9 i 18, [(#GET{mots_choisis}|foreach)] retourne :

  • 0=>4
  • 1=>9
  • 2=>18

Fixeu-vos bé que [(#GET{mots_choisis}|table_valeur{2})] retorna 18, el valor associat a la clau 2, per tant el tercer valor de la matriu.

-  |array_merge afegeix un parell clau/valor al final de la matriu. Això permet, per tant, forçar el "nom" de les claus.

Alerta (1): si una clau apareix diverses vegades, només es retindrà l’últim valor d’aquesta clau.

Alerta (2): la clau que es vol forçar no pot ser de tipus numèric. En efecte, la documentació d’array_merge precisa:

Si passeu una sola matriu a aquesta funció i hi ha índexs numèrics, les claus seran tornades a indexar normalment.

Hi ha dues solucions a aquesta limitació:

-  prefixar aquesta clau amb un valor alfabètic:

[(#GET{mots_choisis}|foreach)] retorna:

  • mot4=>Poma
  • mot9=>Plàtan
  • mot18=>Pastanaga

-  invertir clau i valor, amb la condició que valor no sigui numèric:

[(#GET{mots_choisis}|foreach)] retorna:

  • Poma=>4
  • Plàtan=>9
  • Pastanaga=>18

En aquest cas, podrem aplica la funció PHP |array_flip com a filtre a aquesta matriu final (desprès del bucle):

[(#SET{mots_choisis, #GET{mots_choisis}|array_flip})]

[(#GET{mots_choisis}|foreach)] retorna llavors:

  • 4=>Poma
  • 9=>Plàtan
  • 18=>Pastanaga

Utilitzar la matriu a dins d’un bucle amb l’operador IN

Tornem a agafar la matriu mots_choisis que conté #ID_MOT, a continuació es pot seleccionar els articles lligats a les mateixes paraules clau que el nostre article inicial gràcies al criteri IN.

Aquest ús té múltiples usos, sobretot quan es vol seleccionar objectes amb l’ajuda de diversos criteris que no poden formar part del mateix bucle, per barrejar-los després entre ells amb un criteri de selecció únic.

Exemples d’ús de les taules

-  Visualització condicional en funció de la pàgina (valor de #ENV{page}) :

-  Visualització condicional en funció d’una variable passada a l’URL [3] :

-  Seleccionar els articles d’una secció i tots aquells que es puguin trobar arreu associats a una paraula clau i després llistar tots aquests articles per data.

Notes

[1Si voleu més detalls, vegeu #SET i #GET.

[2|find correspon a la funció PHP in_array, amb la diferència que aquest filtre no dóna el missatge d’error "Warning : in_array() [function.in-array]: Wrong datatype for second argument." si la variable n’est finalement pas un tableau. Efectivament, quan una variable està generada automàticament, no es pot saber sempre si existirà i si es tractarà d’una matriu.

[3Vegeu #SELF i |parametre_url.


Descarregar l’esquelet d’aquesta pàgina Lloc Web fet amb l’SPIP | Espace de traduction | Espai privat