Imprimir un array multidimensional amb una de les dimensions generada dinàmicament

A voltes pot ser necessari que les dimensions d’un array multidimensional es puguin generar dinàmicament, o que les poguem filtar en base a algun criteri. Per exemple: en un web en el qual donem importància al gènere de l’usuari, seria necessari tenir els missatges en les corresponents variants masculina i femenina, així com disposar d’una manera eficaç i neta d’impirmir una o altra variant en funció de l’usuari.

Per tal de fer-ho, podem tenir els missatges en un array multidimensional com aquest:

Ara, per imprimir la salutació a l’usuari, tan sols ens caldria fer crides com les següents, que ens retornarien les salutacions corresponents:

L’objectiu

El nostre objectiu és que quan volguem saludar a l’usuari amb un «Hola!» no ens calgui especificar-ne el gènere, ja que això podria ser una informació que tenim emmagatzemada i que, per tant, podem utilitzar. I no volem estar duplicant codi en va, oi?

Les funcions

En primer lloc, necessitem una funció saluda() que s’encarregui de valorar quina salutació requereix l’usuari, en base a la informació que en tenim. Una com aquesta:

Si la revisem línia a línia, aquesta funció fa el següent:

  1. Rep la variable $saluda, que per defecte valorem com a false per evitar que la funció ens retorni continguts sense haver-li passat un argument
  2. Inclou l’array $salutacions amb les salutacions
  3. Inclou la variable $current_user, en la qual hi tenim emmagatzemada tota la informació de l’usuari
  4. Evalua si l’usuari és homa o dona, i ens retorna el valor corresponent per a la variable gender.
  5. Finalment, ens retorna la salutació que necessitem

Gràcies a la la informació de l’usuari que tenim emmagatzemada a la variable current_user, podem especificar si és home o dona amb aquestes dues funcions:

Un plat apart

No puc entrar a valorar tots els detalls, i està fora de la intenció d’aquest article discutir com gestionar la informació d’un usuari que tenim a una base de dades, però cal tenir en compte que la variable $current_user està desada en una sessió, i que és un array associatiu amb tota la informació de l’usuari provinent de la base de dades. Tot i que no la comentaré, aquesta és la funció que ho fa possible:

També us cal saber, tot i que ja ho haureu endevinat, que tenim el gènere de l’usuari guardat a la columna gender, amb els valors «M» si és home, i «F» si és dona, i que en disposem així:

Ja quasi ho tenim

Arribats ací, ja quasi ho tenim. Ara tan sols ens falta associar el valor retornat per la funció saluda() a una variable, i fer un condicional que la imprimexi quan tingui un valor retornat.

Per últim, ja tan sols ens cal dir quina salutació volem enviar a l’usuari. Ho farem definint la variable $salutacio amb una de les salutacions que teniem a l’array $salutacions. Així:

Ara, la funció saluda() rebrà l’argument $saluda, que enclou el valor “hola”, i ens retornarà la variable multidimensional que necessitem. En altres paraules, ens retornarà:

Era un gat, era un gos…

Amb aquest petit joc de funcions hem acomseguit que les salutacions que volem enviar a l’usuari estiguin en masculí o femení en base a la informació que en tenim a la base de dades. Amb això haurem reduït considerablement el codi a les nostres pàgines, ja que tan sols ens cal especificar quina salutació colem (un “hola” o un “adéu”), però les evaluacions necessàries per a imprimir una salutació adequada queden en mans de tres petites funcions.

June 12, 2012