MATRIUS O ARRAYS(ARRANJAMENTS) DE DUES DIMENSIONS

 

Les matrius diem que són arrays(arranjaments) de dues dimensions. També podem veure-les com taules on cada element té una fila i una columna. Per comprendre-les millor podem recordar les matrius matemàtiques de 2 dimensions. Un exemple de matriu en matemàtiques podria ser aquesta:

 

 

En una matriu normalment parlem de files i columnes i diem que la matriu té m files in columnes. Així, cada element queda identificat per la seva fila ii la seva columna j. Per exemple, en la matriu que hem mostrat anteriorment podríem dir que tenim 3 files (fila 0, fila 1 i fila 2) i quatre columnes (columna 0, columna 1, columna 2, columna 3). Podríem dir que l'element de la fila 1, columna 3 és igual a 2. De la mateixa manera podríem dir:

$valor[0][0] = 1; 
$valor[0][1] = 14; 
$valor[0][2] = 8; 
$valor[0][3] = 3;

$valor[1][0] = 6; 
$valor[1][1] = 19; 
$v
alor[1][2] = 7; 
$v
alor[1][3] = 2;

$valor[2][0] = 3; 
$valor[2][1] = 13; 
$valor[2][2] = 4; 
$valor[2][3] = 1;

Escriu ara aquest codi i guardeu amb un nom de fitxer com ejemplo3.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

<? Php

$animals[0][0] = "Gos" ;

$animals[0][1] = "Gat" ;

$animals[1][0] = "Cuc" ;

$animals[1][1] = "Burro" ;

$animals[2][0] = "Murciélago" ;

$animals[2][1] = "Cocodril" ;

echo $animals[2][1];

echo $animals[0][0];

?>

Cal recordar que els arrays sempre comencen numerar des de zero.

Una altra forma d'assignar valors a una matriu matriu és similar a la que ja descrivim per als vectors. Escriu aquest codi i guardeu amb un nom de fitxer com ejemplo4.php. A continuació, puja el fitxer al servidor i visualitza el resultat.

<? Php

$animals=array(

array("Gos" , "Gat"),

array("Cuc" , "Burro"),

array("Ratapinyada" , "Cocodril")

);

echo $animals[2][1];

echo $animals[0][0];

?>

La sintaxi que hem emprat equival al següent:

$animals[0][0] = "Gos"; $animals[0][1] = "Gat";

$animals[1][0] = "Cuc"; $animals[1][1] = "Burro";

$animals[2][0] = "Murciélago"; 

$animals[2][1] = "Cocodril";

D'aquí que per pantalla es mostri "Cocodril" i "Gos", igual que en l'exemple anterior.

També obtenim el mateix resultat usant aquest codi, que és una barreja de tots dos tipus de sintaxi:

<? Php

$animals[0] = array("Gos" , "Gat");

$animals[1] = array("Cuc" , "Burro");

$animals[2] = array("Ratapinyada" , "Cocodril");

echo $animals[2][1];

echo $animals[0][0];

?>

La visualització obtinguda és la mateixa: per pantalla es mostra "Cocodril" i "Gos", igual que en l'exemple anterior.

 

ARRAYS MULTIDIMENSIONALS

Els arrays multidimensionals són els que tenen més de dues dimensions. Aquests tipus d'arrays es defineixen com les matrius però afegint més índexs.

Escriu aquest codi, guarda l'arxiu php, sols carregueu-lo al servidor i visualitza el resultat al teu navegador.

<? Php

$animals[0][0][0] = "Gos" ;

$animals[0][0][1] = "Gat" ;

$animals[0][0][2] = "Cuc" ;

$animals[1][0][0] = "Burro" ;

$animals[1][0][1] = "Murciélago" ;

$animals[1][0][2] = "Cocodril" ;

echo "<br/> & nbsp; & nbsp; & nbsp;" . $animals[1][0][1];

echo "<br/> & nbsp; & nbsp; & nbsp;" . $animals[0][0][3];

?>

En aquest exemple hem inclòs una línia que té poc sentit, o podria interpretar-se com un error:

echo "<br/> & nbsp; & nbsp; & nbsp;" . $animals[0][0][3];

Fixa't que estem invocant un localitzador [0][0][3] que no existeix, o al que encara no li hem assignat valor. Depenent del llenguatge i de la versió el resultat pot ser un o altre. En principi, ha de tractar d'evitar-invocar una variable tipus array a la qual no s'hagi assignat valor, ja que això suposa una inconsistència o incoherència. En general, si això passa, PHP retornarà un valor "buit", que en aquest cas suposaria que a la pantalla no es mostra gens associat a aquesta variable. Per això a la pantalla veiem únicament "Ratapinyada" i res més.

Escriu el codi que incloem més avall i visualitza el resultat. Si et fixes, quan declarem un array dins d'un altre array el que fem és afegir una dimensió més a l'array. Per exemple, si volguéssim declarar un array de tres dimensions de nom $mevaData podríem escriure:

<? Php

$mevaData = array (// array Declara

array(// Dimensio[0] [...] [...]

array("13 gener 2015" , "11 febrer 2018" ), // [0][0][...]

array("13 gener 2020" , "11 febrer 2015" ), // [0][1][...]

),

array(// Dimensio[1] [...] [...]

array("3 agost 2017" , "1 octubre 2016" ), // [1][0][...]

array("3 agost 2013" , "1 octubre 2019" ), // [1][1][...]

),

array(// Dimensio[2] [...] [...]

array("10 juny 2020" , "11 març 2019" ), // [2][0][...]

),

array(array( "22 març 2020" , "28 maig 2019" ), // [3][0][...]

array("22 març 2019" , "28 maig 2018" ), // [3][1][...]

array("22 març 2018" , "28 maig 2017" ), // [3][2][...]

array("22 març 2017" , "28 maig 2016" ), // [3][3][...]

)

);

echo "<br/> & nbsp; & nbsp; & nbsp;" . $mevaData[3][2][0];

?>

En aquest exemple hem definit valors per als següents índexs d'array:

$mevaData[0][0][0], $mevaData[0][0][1]

$mevaData[0][1][0], $mevaData[0][1][1]

$mevaData[1][0][0], $mevaData[1][0][1]

$mevaData[1][1][0], $mevaData[1][1][1]

$mevaData[2][0][0], $mevaData[2][0][1]

$mevaData[3][0][0], $mevaData[3][0][1]

$mevaData[3][1][0], $mevaData[3][1][1]

$mevaData[3][2][0], $mevaData[3][2][1]

$mevaData[3][3][0], $mevaData[3][3][1]

Comprova sol·licitant la visualització de totes aquestes variables, com veiem en aquest exemple.

<? Php

$mevaData=array(

array(

array( "13 gener 2015" , "11 febrer 2018"),

array( "13 gener 2020" , "11 febrer 2015"),

),

array(

array("3 agost 2017" , "1 octubre 2016"),

array("3 agost 2013" , "1 octubre 2019"),

),

array(

array("10 juny 2020" , "11 març 2019"),

),

array(

array("22 març 2020" , "28 maig 2019"),

array("22 març 2019" , "28 maig 2018"),

array("22 març 2018" , "28 maig 2017"),

array("22 març 2017" , "28 maig 2016"),

)

);

echo "<br/> & nbsp; & nbsp; & nbsp;" . $mevaData[3][2][0];

echo $mevaData[0][0][0]. "A"; echo $mevaData[0][0][1]. "Contracte";

echo $mevaData[0][1][0]. "A"; echo $mevaData[0][1][1]. "Contracte";

echo $mevaData[1][0][0]. "A"; echo $mevaData[1][0][1]. "Contracte";

echo $mevaData[1][1][0]. "A"; echo $mevaData[1][1][1]. "Contracte";

echo $mevaData[2][0][0]. "A"; echo $mevaData[2][0][1]. "Contracte";

echo $mevaData[3][0][0]. "A"; echo $mevaData[3][0][1]. "Contracte";

echo $mevaData[3][1][0]. "A"; echo $mevaData[3][1][1]. "Contracte";

echo $mevaData[3][2][0]. "A"; echo $mevaData[3][2][1]. "Contracte";

echo $mevaData[3][3][0]. "A"; echo $mevaData[3][3][1]. "Contracte";

?>

 

EXERCICI

Crea el codi PHP de 3 arxius que donin resposta al següent plantejament:

Volem emmagatzemar en una matriu el nombre d'alumnes amb què compta una acadèmia, ordenats en funció del nivell i de l'idioma que s'estudia. Tindrem 3 files que representaran al Nivell bàsic, mitjà i de perfeccionament i 4 columnes en què figuraran els idiomes (0 = Anglès, 1 = Francès, 2 = Alemany i 3 = Rus). Es demana fer la declaració de la matriu i assignar-li els valors indicats en la següent imatge a cada element de les següents maneres (crea un arxiu php per cadascuna d'aquestes maneres):

 

a) Amb una sintaxi basada exclusivament en índexs, i mostrar per pantalla els alumnes que hi ha a cada nivell i idioma.

b) Amb una sintaxi basada en l'ús niat de la paraula array, i mostrar per pantalla els alumnes que hi ha a cada nivell i idioma.

c) Amb una sintaxi que combini l'ús d'array i l'ús d'índexs, i mostrar per pantalla els alumnes que hi ha a cada nivell i idioma.

Nota: per exemple, ha de mostrar per pantalla que el nombre d'alumnes en el nivell bàsic, idioma anglès, hi ha 1 alumne; en el nivell bàsic, idioma francès, hi ha 14 alumnes, etc.