FUNCIÓ COUNT

 

Abans de poder recórrer un array, hem de saber quina és la seva mida per poder recórrer-lo. Suposem que un array té tres elements: hem de donar una instrucció perquè s'extregui el valor associat a cada un dels elements de l'array, que normalment serà una cosa semblant a "per a cadascun dels tres elements de l'array, extreure el seu valor" .

No obstant això, si l'array té 24 elements, la instrucció serà del tipus "per a cada un dels vint elements de l'array, extreure el seu valor".Com veiem, moltes vegades ens cal saber el nombre d'elements que hi ha al array per poder recórrer-lo, i per això ens resultarà útil la funció count.

La funció count retorna el nombre d'elements que hi ha en l'array. És a dir per a un array de 4 elements, la funció count tornarà el nombre 4. Recorda que si es tracta de valors numèrics d'índexs, els quatre valors numèrics seran normalment 0, 1, 2 i 3 en lloc d'1, 2, 3 i 4.

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

<? Php // Exemple count

$estació[ 0 ] = "Primavera" ;

$estació[ 1 ] = "Estiu" ;

$estació[ 2 ] = "Tardor" ;

$estació[ 3 ] = "Hivern" ;

echo count($estació);

?>

Pots comprovar que es mostra el número 4 perquè la matriu té 4 elements.

 

RECORREGUTS DE ARRAYS UNIDIMENSIONALS

Ara que ja coneixem què són els arrays, hem de conèixer com recórrer per extreure o comprovar els valors que conté cada un dels elements de l'array. Aquesta és una tasca habitual en programació que en general va a tenir gran utilitat per a nosaltres.

El arrays es poden recórrer de moltes maneres, nosaltres no les explicarem totes. Tractarem de veure en principi les més habituals i senzilles.

 

Recorregut d'arrays mitjançant for

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 // Exemple arrays

$array[0] = "Un" ;

$array[1] = "Dos" ;

$array[2] = "Tres" ;

$array[3] = "Quatre" ;

$array[4] = "Cinc" ;

$array[5] = "Sis" ;

$array[6] = "Set" ;

$array[7] = "Vuit" ;

for($i = 0; $i < count($array); $i++) {

echo $array[$i]. "<br/>" ;

}

?>

Com a exercici i tenint en compte el que s'ha explicat en els lliuraments anteriors sobre els diferents tipus d'instruccions de repetició, escriu el codi que doni lloc al mateix resultat que l'exemple anterior però usant el comandament while i comprova que obtens el mateix resultat.

 

CONÈIXER COUNT

Executa aquest codi:

<? Php // Exemple arrays aprenderaprogramar.com

$array[5] = "Un";

$array[6] = "Dos";

$array[7] = "Tres";

$array[8] = "Quatre";

$array[9] = "Cinc";

$array[10] = "Sis";

$array[11] = "Set";

$array[12] = "Vuit";

echo 'Elements inicialitzats a la matriu:'. .count($array) '<br/>';

for ($i=0; $i<count($array); $i++) {

echo $array[$i] .'... <br/> ';

}

echo $array[15] 'aaa <br/>.';

echo count($altreArray[14][33]). Elements <br/> ';

?>

 

 

El resultat obtingut serà el següent:

Elements inicialitzats a la matriu: 8 
... 
... 
... 
... 
... 
Un ... 
Dos ... 
Tres ... 
aaa 
0 elements

Analitzem el que està passant. La matriu $array no té definits quins són els seus elements d'índex 0, 1, 2, 3 i 4. En canvi sí que té definits valors per als seus elements d'índex 5, 6, 7, 8, 9, 10, 11 i 12. hi ha 8 elements amb valors definits però els seus índexs no són 0, 1, 2, 3, 4, 5, 6, 7 com és l'habitual, sinó que són 5, 6, 7, 8, 9, 10, 11 i 12.

En executar el for començant amb un valor de la variable de control igual a zero, s'executa echo $array[0]. '... <br/>'; En no tenir un valor assignat, $array[0] retorna buit i simplement es mostren tres punts per pantalla. El mateix passa amb els índexs 1, 2, 3, 4 i només és a l'arribar a l'índex cinc quan es mostren valors per pantalla.

No obstant això, només es mostraran els elements amb índex 5 a 8 de l'array, quedant la resta d'elements sense ser mostrat.

A més vam comprovar que podem invocar elements de l'array per sobre de l'índex màxim definit sense obtenir error, i que fins i tot podem invocar un nom d'array que no hem declarat ni utilitzat, amb qualsevol índex, sense obtenir error.

En aquest exemple podríem mostrar tots els elements de l'array fent un "petit canvi":

for($i=5; $i<count($array)5; $i++)

No obstant això aquesta solució no és satisfactòria perquè no la podem aplicar com a solució per recórrer qualsevol fallida.

A manera de resum direm el següent:

count ens retorna el nombre d'elements inicialitzats l'array.

Si els índexs de l'array no són seqüencialment 0, 1, 2, 3, etc. el recorregut amb un for tradicional pot resultar no satisfactori, per la qual cosa haurem de pensar en altres alternatives per recórrer l'array. Parlarem d'això més endavant.

 

COUNT AMB ARRAYS MULTIDIMENSIONALS

En el cas d'arrays de més d'una dimensió, la funció count retorna el nombre d'elements que hi ha en un nivell de l'array definit i per a un índex definit. Cridem nivell de l'array a cadascun dels claudàtors existents en l'array. Per exemple si hem definit $exem[2][5][1][6][2]=33; i $exem[2][5][3][1][9]=55; diem que en el primer nivell de l'array, corresponent al primer índex, hi ha un sol índex: el 2. En el segon nivell de l'array per índex 2 hi ha un sol índex: el 5. En el tercer nivell de l'array amb índex 1 hi ha un només índex: el 6. En el tercer nivell de l'array amb índex març hi ha un sol índex: el 1. En el quart nivell de l'array amb índex juny hi ha un sol índex: el 2. En el quart nivell de l'array amb índex 1 hi un sol índex: el 9.

Amb un exemple comprendrem millor el funcionament de count a una matriu multidimensionals. Executa aquest codi:

<? Php // Exemple arrays

$mevaEspArray[6]=99;

$mevaEspArray[22]=87;

echo 'Nom d'Elements de mevaEspArray és' .count($mevaEspArray) '<br/>.';

echo "--------------------";

$array2[0][0][0] = "prova1";

$array2[0][0][1] = "prova2";

$array2[0][0][2] = "prova3";

$array2[0][1][0] = "prova4";

$array2[0][1][1] = "prova5";

$array2[1][0][1] = "prova6";

$array2[1][1][2] = "prova7";

$array2[1][2][1] = "prova8";

$array2[2][0][0] = "prova9";

$array2[2][0][1] = "prova10";

$array2[5][0][1] = "prova11";

echo '<br/> Nombre de índexs en el primer nivell:' .count($array2);

echo '<br/> Nombre d'índexs en el Nivell Segon array[0]:' .count($Matriu2[0]);

echo '<br/> Nombre d'índexs en el Nivell Segon de array[1]:' .count($Matriu2[1]);

echo '<br/> Nombre d'índexs en el Nivell Segon d'arranjament[2]:' .count($Matriu2[2]);

echo '<br/> Nombre d'índexs en el Nivell Segon de array[3]:' .count($array2 [3]);

echo '<br/> Nombre d'índexs en ell Nivell Segon de array[5]:' .count($array2 [5]);

echo '<br/> Nombre de índexs en el tercer nivell array[0][0]:' .count($array2 [0] [0]);

echo '<br/> Nombre de índexs en el tercer nivell array[0][1]:' .count($array2 [0] [1]);

echo '<br/> Nombre de índexs en el tercer nivell array[1][0]:' .count($array2 [1] [0]);

echo '<br/> Nombre de índexs en el tercer nivell array[1][1]:' .count($array2 [1] [1]);

echo '<br/> Nombre de índexs en el tercer nivell array[1][2]:' .count($array2 [1] [2]);

echo '<br/> Nombre de índexs en el tercer nivell array[2][0]:' .count($array2 [2] [0]);

echo '<br/> Nombre de índexs en el tercer nivell array[5][0]:' .count($array2 [5] [0]);

?>

El resultat obtingut serà el següent:

Nombre d'elements de mevaEspArray es 2 
-------------------- 
Nombre de índexs en el primer nivell: 4 
Nombre de índexs en el segon nivell de array[0]: 2 
Nombre de índexs en el segon nivell de array[1]: 3 
Nombre de índexs en el segon nivell de array[2]: 1 
Nombre de índexs en el segon nivell de array[3]: 0 
Nombre de índexs en el segon nivell de array[5]: 1 
Nombre de índexs en el tercer nivell de array[0][0]: 3 
Nombre de índexs en el tercer nivell de array[0][1]: 2 
Nombre de índexs en el tercer nivell de array[1][0]: 1 
Nombre de índexs en el tercer nivell de array[1][1]: 1 
Nombre de índexs en el tercer nivell de array[1][2]: 1 
Nombre de índexs en el tercer nivell de array[2][0]: 2 
Nombre de índexs en el tercer nivell de array[5][0]: 1

Fixa't que per exemple count($array2[0][1]) ens retorna el nombre d'elements existents de tipus $array2[0][1][x] on x és qualsevol índex, és a dir, el nombre d'elements de tercer nivell de l'array per als índexs inicials 0 i 1.

 

 

RECORREGUT DE ARRAYS MULTIDIMENSIONALS

Per recórrer una matriu multidimensional, haurem d'anar niu tantes estructures repetitives com dimensions tingui l'array. Amb un exemple es veurà tot molt més clar.

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

<? Php // Exemple arrays

$array[0][0] = "Un" ;

$array[0][1] = "Dos" ;

$array[1][0] = "Tres" ;

$array[1][1] = "Quatre" ;

for($i=0; $i<count($array); $i++) {

for($j=0; $j<count($array[$i]); $ j ++) {

echo $array[$i][$j]. "<br/>" ;

}

}

echo "--------------------";

$array2[0][0][0] = "Cinc" ;

$array2[0][0][1] = "Sis" ;

$array2[0][0][2] = "Set" ;

$array2[0][1][0] = "Vuit" ;

$array2[0][1][1] = "Nou" ;

for($i=0; $i<count($array); $i++) {

for($j=0; $j<count($array[$i]); $j++) {

for($k=0; $k<count($array[$i][$j]); $k++) {

echo $array[$i][$j][$k] '<br/>'.;

}

}

}

?>

Fixa't que per poder obtenir el resultat desitjat els elements dels arrays han d'estar definits usant índexs que comencin a 0 i siguin progressivament 1, 2, 3, 4 ... Si no fos així aquests bucles, en estar definits partint de 0, no funcionarien.

Fixa't també en la lògica dels bucles, per exemple el primer bucle ho podríem llegir així: per a cada element des de 0 fins el nombre d'elements de primer nivell, i per a cada element des de 0 fins el nombre d'elements de segon nivell amb l'índex extret prèviament, mostrar el contingut de l'array. Si per exemple en el primer nivell tenim dos índexs que són 0 i 1, començarem amb l'índex 0 i es veurà per l'índex 0 quants índexs hi ha al segon nivell (són 2). D'aquesta manera el primer que es mostrarà són els índexs [0] [0] i [0] [1].Un cop completat el recorregut de l'índex 0 es passa a l'índex 1 i se segueix el mateix procés.

Nota: en algunes versions o situacions demanar un element no definit d'un array pot donar lloc al fet que aparegui un error. Per exemple, si l'element $array[2][3] no existeix i féssim una crida a aquest element com echo $array[2][3] podria aparèixer un error tipus "undefined offset ..." similar a aquest:

 

Recorregut d'arrays mitjançant foreach

PHP incorpora una manera "còmoda" per poder recórrer tots els elements d'un array. Aquesta forma es basa en l'ús de la instrucció foreach.

Aquest tipus de recorreguts es sol usar quan obtenim dades d'una base de dades.

El tipus d'array que ens sol tornar una consulta a la base de dades és similar al següent:

$dadesArray =

array(array('nom'=>'Antonio', 'cognoms' => 'Gómez Gómez', 'telèfon' => '675.832.145'),

array('nom'=>'Pedro', 'cognoms' => 'Guillén Gastón', 'telèfon' => '674.562.178'),

array ('nom' => 'Dolores', 'cognoms' => 'Candela Crema', 'telèfon' => '689.765.432'),

                                .

                                .

                                .

                                .

array ('nom' => 'Rubén', 'cognoms' => 'Guàrdia de', 'telèfon' => '654.213.896'),

);

Recorda que l'anterior forma d'expressió és equivalent a aquesta altra:

$dadesArray[0]['nom'] = 'Antonio'

$dadesArray[0]['cognoms'] = 'Gómez Gómez'

$dadesArray[0]['telèfon'] = '675.832.145'

$dadesArray[1]['nom'] = 'Pedro'

$dadesArray[1]['cognoms'] = 'Guillén Gastón'

$dadesArray[1]['telèfon'] = '674.562.178'

$dadesArray[2]['nom'] = 'Dolores'

$dadesArray[2]['cognoms'] = 'Candela Crema'

$dadesArray[2]['telèfon'] = '689.765.432'

La diferència està en que en el primer cas els índexs de l'array són en alguns casos cadenes (es tracta d'arrays associatius) mentre que en el segon cas els índexs de l'array són nombres (es tracta d'arrays tradicionals). En el primer cas els valors 0, 1 i 2 són assignats automàticament per php perquè no s'ha especificat una altra cosa.

Per recórrer arrays de manera còmoda s'usa la instrucció foreach.

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

<?php //Exempe foreach

$rows = array(

array(

'nom' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefon' => '675832145'),

array(

'nom' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefon' => '674562178'),

array(

'nom' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefon' => '689765432'),

array(

'nom' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefon' => '654213896')

);

foreach($rows as $valor) {

echo 'Nom: ' . $valor['nom'] . '<br/>';

}

?>

Com podem observar, anirem recorrent totes les files i mostrant el nom.

$valor és una variable temporal que només existeix durant l'execució de la instrucció foreach, i aquesta variable va prenent en cada repetició o iteració el valor de l'element següent en cas de fallida principal. En aquest cas, l'element que hi ha en cas de fallida és un altre array. Al seu torn, indiquem que per a cada un dels arrays extrets en el recorregut, se'ns mostri l'item de l'array l'índex és 'nom'.

En aquest cas podríem obtenir el mateix resultat usant aquest codi:

echo $files[0]['nom']. '<br/>';

echo $files[1]['nom']. '<br/>';

echo $files[2]['nom']. '<br/>';

echo $files[3]['nom']. '<br/>';

Però pensa que per recórrer un array de diversos centenars d'elements no resultarà pràctic escriure'ls 1-1 ...

Com a exercici escriu el codi que mostri els noms i cognoms de l'array anterior.

Si et resulta una mica complicat l'exercici anterior, prova amb aquest codi que és més senzill, i després torna a revisar el codi anterior.

<? Php

$estacio[0] = "Primavera" ;

$estacio[1] = "Estiu" ;

$estacio[2] = "Tardor" ;

$estacio[3] = "Hivern" ;

foreach($estacio as $valor) {

echo "&nbsp; &nbsp; &Nbsp;". $valor. '<br/>' ;

}

?>

El resultat que obtenim és similar al que es veu en la següent imatge. Com pots comprovar, la variable $ valor (variable transitòria) va prenent en cada repetició del bucle el contingut dels elements o ítems de l'array que estem recorrent.

 

EXERCICI 1

Crea un array amb nom paisLimitrofe on els elements de l'array seran cadenes de text amb els països limítrofs (amb frontera) amb el teu. Per exemple si vivim a Perú tenim com a països limítrofs Equador, Colòmbia, Brasil, Bolívia i Xile.

a) Utilitzant un bucle for, mostra per pantalla els països limítrofs.

b) Utilitzant un bucle for each, mostra per pantalla els països limítrofs.

 

 

EXERCICI 2

Escriu i executa el següent codi i respon a les següents preguntes:

$equip = array(porter=>'Casillas', defensa=>'Hierro', medi=>'Cesc', davanter=>'Ronaldo');

 

foreach($equip as $posicio=>$jugador) {

    echo "El". $posicio. "És". $jugador;

    }

a) ¿$ equip és una variable normal, una matriu tradicional o un array associatiu?

b) ¿porter és un índex d'un array, un contingut d'un element d'un array o un contingut d'una variable simple?

c) ¿En executar el codi obtens un resultat per pantalla o obtens un error? Què és el que fa el codi?

 

 

EXERCICI 3

Suposa que vols representar el següent: hi ha 2 equips espanyols, en el primer el porter és Frank, el defensa Pepe, el medi Luis i el davanter Raul. En el segon, el porter és Tiger, el defensa Mourin, el medi Katz i el davanter Alberto. Hi ha 1 equip mexicà, on el porter és Suarez, el defensa Koltz, el medi Fernandez i el davanter Ramirez. Hi ha 2 equips argentins. En el primer el porter és Higuita, el defensa Mel, el medi Rubens i el davanter Messi. En el segon el porter és Kostenmeiner, el defensa Lenkins, el medi Marash i el davanter Juanes.

a) Representa les dades utilitzant una matriu de tres dimensions amb índexs numèrics on el primer índex indica el país, el segon l'equip i el tercer la posició del jugador. Presenta la informació del país, equip, posicions i jugadors de cada equip usant un bucle for.

b) Representa les dades utilitzant una matriu de tres dimensions amb índexs numèrics on el primer índex indica el país, el segon l'equip i el tercer la posició del jugador. Presenta la informació del país, equip, posicions i jugadors de cada equip usant un bucle for each.

c) Representa les dades utilitzant arrays arrays associatius on el primer índex indica el país, el segon l'equip i el tercer la posició del jugador (un exemple de com declarar un element seria per exemple: $ equips ['Mèxic'] ['Equipo1 '] [' defensa '] = "Koltz";). A continuació usant un bucle foreach recorre els elements de l'array mostrant la informació del país, equip, posicions i jugadors de cada equip.