Declarar uma matriz e recuperar valores
-  #SET{minha_matriz, #ARRAY{chave1,valor1,chave2,valor2}}
cria a variável minha_matriz e atribui a matriz PHP como valor, podendo ser representada com abaixo:
| Chaves | Valores | 
|---|---|
| chave1 | valor1 | 
| chave2 | valor2 | 
Não é necessário envolver as strings em aspas simples ou duplas, excepto para especificar uma string vazia, que se notará ’’
-  Para fins de teste, pode-se exibir a matriz com o filtro |foreach (obsoleto após SPIP 4)
-  O valor associado a uma determinada chave pode ser recuperada usando-se o filtro |table_valeur :
[(#GET{minha_matriz}|table_valeur{chave1})] devolve valor1.
Após o SPIP 3.0, pode-se simplificar na seguinte forma [(#GET{minha_matriz/chave1})].
-  Verificar a presença de um valor na matriz com o filtro |find [2]:
[(#GET{minha_matriz}|find{valor2}|oui)
  Será exibido se o valor existir na matriz.
]
Preencher uma matriz dinamicamente
Uma vantagem das matrizes é que podem ser preenchida dinamicamente pelos resultados de um ou mais loops.
A matriz deve ser declarada por um #SET antes do loop : #SET{minha_matriz,#ARRAY}
No loop, um novo #SET redefine a minha_matriz a cada iteração: ele é recuperado por #GET e incluí-se um novo valor graças aos filtros |push ou |array_merge.
#SET{minha_matriz,#ARRAY}
<BOUCLE(...)>
    #SET{minha_matriz, #GET{minha_matriz}|push{#COMPTEUR_BOUCLE}}
</BOUCLE>
A ordem dos valores da matriz depende dos critérios de ordenação do loop.
-  |push inclui simplesmente um valor ao final da matriz. A chave é indexada automaticamente: ela é incrementada em 1 a cada iteração do loop, iniciando em 0 (a primeira chave é 0, em seguida 1, 2, 3,...).
Exemplo: criar uma matriz palavras_escolhidas contendo os #ID_MOT de todas as palavras-chave ligadas a uma matéria.
#SET{palavras_escolhidas, #ARRAY}
<BOUCLE_temas(MOTS){id_article}>
  #SET{palavras_escolhidas, #GET{palavras_escolhidas}|push{#ID_MOT}}
</BOUCLE_temas>
Se as palavras ligadas a esta matéria tiverem os números 4, 9 e 18, [(#GET{palavras_escolhidas}|foreach)] devolve:
- 0=>4
 - 1=>9
 - 2=>18
 
Note que [(#GET{palavras_escolhidas}|table_valeur{2})] devolve 18, o valor associado à chave 2, ou seja, o terceiro valor da matriz.
-  |array_merge inclui um par chave/valor ao fim da matriz. Isto permite forçar o "nome" das chaves.
Atenção (1) : se uma chave aparece várias vezes, apenas o último valor para essa chave será retido.
Atenção (2) : a chave que se quer forçar não pode ser do tipo numérico. Com efeito, a documentação de array_merge especifica:
Se você passar uma única matriz a esta função e ele tiver índices numéricos, as chaves serão reindexadas normalmente.
Existem duas soluções para esta limitação:
- prefixar esta chave com um valor alfanumérico:
#SET{palavras_escolhidas, #ARRAY}
<BOUCLE_temas(MOTS) {id_article}>
  [(#SET{palavras_escolhidas,#GET{palavras_escolhidas}|array_merge{#ARRAY{mot#ID_MOT,#TITRE}}})]
</BOUCLE_temas>
[(#GET{palavras_escolhidas}|foreach)] devolve:
- mot4=>Maçã
 - mot9=>Banana
 - mot18=>Cenoura
 
- inverter chave e valor, na condição de valor não seja ele mesmo numérico:
#SET{palavras_escolhidas, #ARRAY}
<BOUCLE_temas(MOTS) {id_article}>
  [(#SET{palavras_escolhidas,#GET{palavras_escolhidas}|array_merge{#ARRAY{#TITRE,#ID_MOT}}})]
</BOUCLE_temas>
[(#GET{palavras_escolhidas}|foreach)] devolve:
- Maçã=>4
 - Banana=>9
 - Cenoura=>18
 
Neste caso, pode-se aplicar a função PHP |array_flip como filtro na matriz final (após o loop):
[(#SET{palavras_escolhidas, #GET{palavras_escolhidas}|array_flip})]
[(#GET{palavras_escolhidas}|foreach)] devolve então:
- 4=>Maçã
 - 9=>Banana
 - 18=>Cenoura
 
Em certos caso, pode-se usar a tag #LISTE que permite inserir matrizes de forma simplificada.
Usar a matriz num loop com o operador IN
Retomemos a matriz palavras_escolhidas contendo os #ID_MOT, pode-se selecionar em seguida as matérias ligadas às mesmas palavras-chave que a nossa matéria inicial, graças ao critério IN.
#SET{palavras_escolhidas, #ARRAY}
<BOUCLE_temas(MOTS){id_article}>
  #SET{palavras_escolhidas, #GET{palavras_escolhidas}|push{#ID_MOT}}
</BOUCLE_temas>
<BOUCLE_mesmos_temas(ARTICLES) {id_mot IN #GET{palavras_escolhidas}}>
  #TITRE <br>
</BOUCLE_mesmos_temas>
Esta utilização conhece múltiplos usos, particularmente quando queremos selecionar objetos com a ajuda de vários critérios que não podem fazer parte do mesmo loop, e depois combiná-los entre si com um critério de ordenação único.
Exemplos de utilização de matrizes
-  Exibição condicional em função da página (valor de #ENV{page}) :
[(#ENV{page}|in_array{#ARRAY{0,article,1,rubrique,2,site}}|oui)
Exibição condicional: a página é de uma matéria, de uma seção ou de um site. ]
- Exibição condicional em função de uma variável passada no URL [3] :
<BOUCLE_todas_as_palavras(MOTS){par titre}{", "}>
  <a href="[(#SELF|parametre_url{lolo,#ID_MOT})]">#TITRE</a>
</BOUCLE_todas_as_palavras>
#SET{as_palavras, #ARRAY}
<BOUCLE_certas_palavras(MOTS){id_article}>
  #SET{as_palavras, #GET{as_palavras}|push{#ID_MOT}}
</BOUCLE_certas_palavras>
[<br>Isto será exibido se o valor da variável 'lolo' passada no URL estiver presente numa matriz 'as_palavras' declarado e preenchido previamente.
  (#ENV{lolo}|in_any{#GET{as_palavras}}|oui)]
- Selecionar as matérias de uma seção e suas associadas, relativamente a uma palavra-chave, e listar todas essas matérias por data.
#SET{as_materias,#ARRAY}
<BOUCLE_materias_secao(ARTICLES){id_rubrique}>
  #SET{as_materias,#GET{as_materias}|push{#ID_ARTICLE}}
</BOUCLE_materias_secao>
<BOUCLE_materias_palavra(ARTICLES){id_mot}>
  #SET{as_materias,#GET{as_materias}|push{#ID_ARTICLE}}
</BOUCLE_materias_palavra>
<BOUCLE_exibir(ARTICLES){id_article IN #GET{as_materias}}{par date}>
  <br>#TITRE
</BOUCLE_exibir>
Fazer loop sobre qualquer matriz
Pode-se usar o loop DATA para percorrer arbitrariamente uma matriz.
Testar se uma matriz está vazia
1º caso
Se #GET{minha_matriz} for uma matriz vazia
/* eu declaro uma matriz vazia */
[(#SET{minha_matriz, #ARRAY})]
/* então o teste a seguir é suficiente: */
[(#GET{minha_matriz}|non) … ]
2º caso
No caso de entradas vazias na matriz, tal como:
[(#SET{minha_matriz, #ARRAY{0,'',1,0}})]
… pode-se usar a função PHP array_filter() que removerá da matriz qualquer valor equivalente a false.
[(#GET{minha_matriz}|array_filter|non) ... ]
Ver também
- #LISTE: tag prática para declarar matrizes simples indexadas
 - O loop DATA: para usar matrizes complexas