PHP Arrays
Revisión del 17:39 16 oct 2016 de Wiki (discusión | contribuciones) (→Accedendo aos valores gardados no array (3ª forma))
Sumario
- 1 Introdución
- 2 Accedendos aos valores gardados no array (para programadores)
- 3 Accedendos aos valores gardados no array (1ª forma)
- 4 Declaración dun array: valores claves
- 5 Eliminando, modificando ou engadindo valores a un array
- 6 Eliminando elementos do array
- 7 Accedendo aos valores gardados no array (2ª forma)
- 8 Accedendo aos valores gardados no array (3ª forma)
- 9 Accedendo aos valores gardados no array (4ª forma)
- 10 Funcións predefinidas relacionadas cos Arrays
- 11 Verificando os datos dun formulario
Introdución
- Un array é un tipo estrutura de datos. Dita estrutura se caracteriza por ter un número de elementos variable no que cada valor a gardar está relacionado cun índice que 'apunta' á posición do elemento dentro do array.
- Podemos identificar un array como unha cómoda con caixóns no que cada caixón se pode identificar có índice do array e dentro de cada caixón teremos gardada a información.
- Cabe sinalar que dentro dun caixón poderíamos ter outra cómoda con máis caixóns a súa vez.
Un array pódese crear có construtor da linguaxe array() desta forma:
1 <?php 2 array( 3 clave => valor, 4 clave2 => valor2, 5 clave3 => valor3, 6 ... 7 ) 8 ?>
Vexamos un exemplo de parte dos ingredientes dunha receita:
1 <?php 2 $ingredientes = array( 3 0 => "améndoa", 4 1 => "fresas", 5 ); 6 7 // a partires de PHP 5.4 8 $ingredientes = [ // Leva corchetes e sen a palabra array 9 0 => "améndoa", 10 1 => "fresas", 11 ]; 12 ?>
- Como vemos a estrutura que mellor se adapta a gardar información sobre os ingredientes dunha receita é un Array. Non ten sentido ter unha variable por cada un dos ingredientes da receita.
- Vexamos un exemplo no que as claves sexan cadeas de caracteres:
1 <?php 2 $persoa = ['nome' => 'Juan Francisco', 3 'direccion' => 'C/ Rúa de alá nº5', 4 'telefono' =>'981121212']; 5 6 ?>
Accedendos aos valores gardados no array (para programadores)
- Existe unha función que devolve toda a estructura do array en forma de volcado coa que podemos ver o número de elementos, claves e valores.
- Dita función é: var_dump()
- Nota:Pódese empregar para outros tipos de variables.
- Unha función equivalente á anterior: función print_r
- Vexamos un exemplo:
1 <?php 2 $array = array("un", "dous", "tres", "catro"); 3 printf("<br>"); 4 var_dump($array); 5 printf("<br>"); 6 print_r($array); 7 ?>
- O resultado:
1 array(4) { [0]=> string(2) "un" [1]=> string(4) "dous" [2]=> string(4) "tres" [3]=> string(5) "catro" } // RESULTADO var_dump 2 Array ( [0] => un [1] => dous [2] => tres [3] => catro ) // RESULTADO print_r
Accedendos aos valores gardados no array (1ª forma)
- Unha das formas para acceder aos valores do array é:
- $variable_array[clave]
- ou
- $variable_array{clave}
- Pódense utilizar corchetes ou chaves indistintamente.
- No exemplo anterior:
1 <?php 2 $ingredientes = [ // Leva corchetes e sen a palabra array 3 0 => "améndoa", 4 1 => "fresas", 5 ]; 6 7 printf("O primeiro ingrediente do array é: %s<br/>", $ingredientes[0]); 8 printf("O segundo ingrediente do array é: %s<br/>", $ingredientes[1]); 9 10 ?>
- No caso anterior no que o array tiña como clave unha cadea:
1 <?php 2 $persoa = ['nome' => 'Juan Francisco', 3 'direccion' => 'C/ Rúa de alá nº5', 4 'telefono' =>'981121212']; 5 printf("Datos da persoa:<br/>Nome:%s<br/>Dirección:%s<br/>Teléfono:%s",$persoa['nome'],$persoa['direccion'],$persoa['telefono']); 6 ?>
Declaración dun array: valores claves
- Como dixemos anteriormente o array ten unha clave coa que facemos referencia aos valores gardados no array.
- Dita clave pode ser numérica ou cadea e os valores que podemos gardar poden ser de calquera tipo.
- Se usamos como clave un tipo de dato diferente, PHP fará un 'cast' a o tipo de dato integer ou string (como indicamos antes).
- Así:
- Float: será convertido a un integer quitando a parte decimal.
- String: se o string é un número válido (por exemplo "8") será convertido a integer.
- Boolean: será convertido a integer (true = 1; false = 0)
- null: será convertido a cadea valeira.
- Se non poñemos clave dará o valor seguinte a última numérica instroducida.
- Vexamos uns exemplos:
1 <?php 2 $disco = [ 3 1 => '32454KAS12', 4 'capacidad' => '500GB', 5 '3500rpm', 6 'marca' => 'seagate', 7 3.5 => 'SATA' 8 ]; 9 10 printf("<br>"); 11 printf("O primeiro dato é o número de serie=> \$disco[1]:%s => A clave numérica é 1<br/>",$disco[1]); 12 printf("O segundo dato=> \$disco['capacidad']:%s<br/>",$disco['capacidad']); 13 printf("O terceiro dato (velocidade) non leva clave polo que dalle a seguine numérica=> \$disco[2]:%s => A clave numérica é 2<br/>",$disco[2]); 14 printf("O cuarto dato é a marca=> \$disco['marca']:%s<br/>",$disco['marca']); 15 printf("O quinto dato (tipo conector) a clave convírtese de float a integer=> \$disco[3]:%s A clave numérica é 3<br/>",$disco[3]); 16 17 ?>
- O resultado:
1 O primeiro dato é o número de serie=> $disco[1]:32454KAS12 => A clave numérica é 1 2 O segundo dato=> $disco['capacidad']:500GB 3 O terceiro dato (velocidade) non leva clave polo que dalle a seguine numérica=> $disco[2]:3500rpm => A clave numérica é 2 4 O cuarto dato é a marca=> $disco['marca']:seagate 5 O quinto dato (tipo conector) a clave convírtese de float a integer=> $disco[3]:SATA A clave numérica é 3
- Como podemos comprobar no exemplo anterior é posible ter un array con claves mixtas (cadea e numérica)
- Outro exemplo:
1 <?php 2 $array = array("un", "dous", "tres", "catro"); 3 printf("%s-%s-%s-%s",$array[0],$array[1],$array[2],$array[3]); 4 ?>
- Neste exemplo non asociamos ningunha clave e PHP irá, dende 0, incrementando a clave asociada a cada valor dentro do array.
Eliminando, modificando ou engadindo valores a un array
Eliminar un elemento do Array
- Para eliminar un elemento do array temos que facer uso da función unset.
1 unset($array[clave]);
- Nota: unset pódese utilizar para eliminar calquera variable que teñamos definida.
- Vexamos un exemplo:
1 <?php 2 $ingredientes = ["améndoa","fresas","azucre","fariña"]; 3 print_r($ingredientes); 4 unset($ingredientes[2]); 5 echo '<br />Despois de eliminar o número 2 (empeza en 0):'; 6 print_r($ingredientes); 7 8 ?>
- Dará como resultado:
1 Array ( [0] => améndoa 2 [1] => fresas 3 [2] => azucre 4 [3] => fariña ) 5 Despois de eliminar o dato con clave 2: 6 Array ( [0] => améndoa 7 [1] => fresas 8 [3] => fariña )
Índices do Array
- Hai que ter coidado cando eliminamos un elemento dun array, xa que os índices non se actualizan.
- Así:
1 <?php 2 $a = array(1 => 'uno', 2 => 'dos', 3 => 'tres'); 3 unset($a[2]); 4 /* producirá un array con estes índices 5 $a = array(1 => 'uno', 3 => 'tres'); 6 */ 7 ?>
- Se queremos que os índices se actualicen teremos que facer uso da función array-values.
- No exemplo anterior:
1 <?php 2 $a = array(1 => 'uno', 2 => 'dos', 3 => 'tres'); 3 unset($a[2]); 4 $a = array_values($a); 5 /* producirá un array con estes índices 6 $a = array(1 => 'uno', 2 => 'tres'); 7 */ 8 ?>
Modificar un elemento do array
- Teremos que saber cal é a súa clave asociada: $array[clave]=novo_valor
- Vexamos un exemplo:
1 <?php 2 $ingredientes = ["améndoa","fresas","azucre","fariña"]; 3 print_r($ingredientes); 4 $ingredientes[2]='mel'; 5 echo '<br />Despois de modificar o dato con clave 2:<br />'; 6 print_r($ingredientes); 7 ?>
- Dará como resultado:
1 Array ( [0] => améndoa [1] => fresas [2] => azucre [3] => fariña ) 2 3 Despois de modificar o dato con clave 2: 4 Array ( [0] => améndoa [1] => fresas [2] => mel [3] => fariña )
Engadir novos elementos ao array
- Para engadir un novo elemento só temos que facer uso dunha clave que non exista no array ou ben usar os corchetes baleiros para que asigne o seguinte valor numérico de clave.
- Sería:
- $array[nova_clave]=novo_valor;
- $array[]=novo_valor;
- A primeira forma permite facer uso de claves numéricas ou de cadea e a segunda forma sempre vai engadir unha clave numérica.
- Vexamos un exemplo:
1 <?php 2 $ingredientes = ["améndoa","fresas","azucre","fariña"]; 3 print_r($ingredientes); 4 $ingredientes[]='ovos'; 5 echo '<br />Despois de engadir un novo ingrediente con clave 4:<br />'; 6 print_r($ingredientes); 7 ?>
- Dará como resultado:
1 Array ( [0] => améndoa [1] => fresas [2] => azucre [3] => fariña ) 2 3 Despois de engadir un novo ingrediente con clave 4: 4 Array ( [0] => améndoa [1] => fresas [2] => azucre [3] => fariña [4] => ovos )
- Outro exemplo:
1 <?php 2 $persoa = ['nome' => 'Juan Francisco', 3 'direccion' => 'C/ Rúa de alá nº5', 4 'telefono' =>'981121212']; 5 print_r($persoa); 6 echo '<br />Despois de engadir un novo dato:<br />'; 7 $persoa['idade']=52; 8 print_r($persoa); 9 ?>
- Dará como resultado:
1 Array ( [nome] => Juan Francisco [direccion] => C/ Rúa de alá nº5 [telefono] => 981121212 ) 2 3 Despois de engadir un novo dato: 4 Array ( [nome] => Juan Francisco [direccion] => C/ Rúa de alá nº5 [telefono] => 981121212 [idade] => 52 )
Eliminando elementos do array
- Con esta forma podemos eliminar elementos do array dentro do bucle.
- Vexamos un exemplo:
1 <?php 2 $datos = ['casa','can','amigo','coche']; 3 echo "Dentro dun bucle...<br />"; 4 while($valor=each($datos)){ 5 if ($valor['key']==1){ 6 unset($valor['value']); 7 } 8 else { 9 printf("<br />Valor con \$valor['value']:%s",$valor['value']); 10 printf("<br />Clave con \$valor['key']:%s",$valor['key']); 11 } 12 } 13 echo "<br />Acabou o bucle<br />"; 14 ?>
- Dará como resultado:
1 Dentro dun bucle... 2 3 Valor con $valor['value']:casa 4 Clave con $valor['key']:0 5 Valor con $valor['value']:amigo 6 Clave con $valor['key']:2 7 Valor con $valor['value']:coche 8 Clave con $valor['key']:3 9 Acabou o bucle
Accedendo aos valores gardados no array (2ª forma)
- Podemos facer uso da función count que devolve o número de elementos do array.
- Vexamos un exemplo:
1 <?php 2 $datos = ['casa','can','amigo']; 3 for ($cont=0; $cont<count($datos); $cont++){ 4 printf("Dato:%s<br />",$datos[$cont]); 5 } 6 ?>
- Loxicamente esta forma de percorrer o array soamente funcionará cando os valores clave sexan de tipo numérico.
- Nota: Hai que ter en conta que dita función devolve 0 se o array non está inicializado ou se o array está baleiro. Para distinguir os dous casos podemos facer uso da función isset vista anteriormente.
- En caso de que non se poida contar (por exemplo se non é un array) devolve 1. Para saber se é un array lembrar que dispoñemos da función is_array.
Eliminando elementos do array
- Non deberíamos eliminar un elemento do array mentres o estamos a percorrer desta forma se queremos continuar có resto de elementos.
- Por exemplo:
1 <?php 2 $datos = ['casa','can','amigo','coche']; 3 for ($cont=0; $cont<count($datos); $cont++){ 4 if ($cont==1){ 5 unset($datos[$cont]); 6 } else { 7 printf("Dato:%s<br />",$datos[$cont]); 8 } 9 } 10 ?>
- Neste exemplo estamos a eliminar o elemento do array coa clave 1 que se corresponde có dato 'can'.
- Como se pode comprobar nunca amosa o dato 'coche' xa que ao eliminar un elemento a función count se decrementa.
Accedendo aos valores gardados no array (3ª forma)
- Cando percorremos un array podemos facer uso dun 'punteiro' que vai pasando de posición dun ao seguinte.
- A función each permite movernos dun elemento do array ao seguinte.
- Dita función devolve noutro array o valor do primeiro elemento do array e a clave asociada a ese valor. Ao mesmo tempo pasa ao seguinte elemento do array.
- Pódese repetir dita operación ata chegar ao final do array. Nese intro a 'función each' devolve false.
- O array de información que devolve a función é:
- [1] ou [value]: Devolve o valor do elemento do array.
- [0] ou [key]: Devolve a key asociada ao valor do elemento do array.
- Por exemplo:
1 <?php 2 $datos = ['casa','can','amigo','coche']; 3 $valor=each($datos); // Le e pasa ao seguinte 4 printf("<br />Valor con \$valor[1]:%s",$valor[1]); 5 printf("<br />Valor con \$valor['value']:%s",$valor['value']); 6 printf("<br />Clave con \$valor[0]:%s",$valor[0]); 7 printf("<br />Clave con \$valor['key']:%s",$valor['key']); 8 9 echo "<br />Lendo outro novo dato do array...<br />"; 10 11 $valor=each($datos); // Le e paso ao seguinte 12 printf("<br />Valor con \$valor[1]:%s",$valor[1]); 13 printf("<br />Valor con \$valor['value']:%s",$valor['value']); 14 printf("<br />Clave con \$valor[0]:%s",$valor[0]); 15 printf("<br />Clave con \$valor['key']:%s",$valor['key']); 16 17 ?>
- Dará como resultado:
1 Valor con $valor[1]:casa 2 Valor con $valor['value']:casa 3 Clave con $valor[0]:0 4 Clave con $valor['key']:0 5 Lendo outro novo dato do array... 6 7 Valor con $valor[1]:can 8 Valor con $valor['value']:can 9 Clave con $valor[0]:1 10 Clave con $valor['key']:1
- Podemos utilizar unha estrutura de bucle para repetir a operación ata que chegue ao final:
1 <?php 2 $datos = ['casa','can','amigo','coche']; 3 echo "Dentro dun bucle...<br />"; 4 while($valor=each($datos)){ 5 printf("<br />Valor con \$valor['value']:%s",$valor['value']); 6 printf("<br />Clave con \$valor['key']:%s",$valor['key']); 7 } 8 echo "<br />Acabou o bucle<br />"; 9 ?>
- Dará como resultado:
1 Dentro dun bucle... 2 3 Valor con $valor['value']:casa 4 Clave con $valor['key']:0 5 Valor con $valor['value']:can 6 Clave con $valor['key']:1 7 Valor con $valor['value']:amigo 8 Clave con $valor['key']:2 9 Valor con $valor['value']:coche 10 Clave con $valor['key']:3 11 Acabou o bucle
- Relacionada coa función 'each' temos as seguintes funcións que modifican a posición do punteiro dentro do array:
- función reset(): Establece o punteiro do array ao primeiro elemento.
- función current(): Devolve o elemento actual ao que estar a apuntar o punteiro do array.
- función next(): Avanza o punteiro unha posición cara adiante e devolve o elemento.
- función prev(): Rebobina o punteiro unha posición cara atrás e devolve o elemento.
Accedendo aos valores gardados no array (4ª forma)
- Outra forma de acceder aos elementos dun array é utilizando a instrución foreach.
- A sintaxe é a seguinte:
1 foreach (expresión_array as $valor) { 2 sentencias 3 } 4 5 OU 6 7 foreach (expresión_array as $clave => $valor) { 8 sentencias 9 }
- Na primeira forma recuperamos o valor de cada elemento do array en cada iteración do bucle for.
- Na segunda forma recuperamos o valor e a clave de cada elemento do array en cada iteración do bucle for.
- Vexamos un exemplo:
1 <?php 2 $datos = ['casa','can','amigo','coche']; 3 4 foreach($datos as $valor){ 5 printf("O valor é:%s<br />",$valor); 6 } 7 ?>
- Dará como resultado:
1 O valor é:casa 2 O valor é:can 3 O valor é:amigo 4 O valor é:coche
- Outro exemplo empregando a segunda forma:
1 <?php 2 $datos = ['casa','can','amigo','coche']; 3 4 foreach($datos as $clave => $valor){ 5 printf("O valor da clave é: %s<br />",$clave); 6 printf("O valor é: %s<br />",$valor); 7 } 8 ?>
- Dará como resultado:
1 O valor da clave é: 0 2 O valor é: casa 3 O valor da clave é: 1 4 O valor é: can 5 O valor da clave é: 2 6 O valor é: amigo 7 O valor da clave é: 3 8 O valor é: coche
Funcións predefinidas relacionadas cos Arrays
- Existen multitude de funcións que nos van permitir traballar con arrays.
- Algunha delas son:
Función list
- Función list: Asigna variables como se foran arrays.
- A idea é que partindo dun array poidamos asociar a variables os valores gardados no array dunha forma rápida.
- Por exemplo:
1 <?php 2 $array = array("un", "dous", "tres", "catro"); 3 4 ?>
- Se eu quero gardar cada elemento do array nunha variable tería que facer:
1 <?php 2 $array = array("un", "dous", "tres", "catro"); 3 4 $var1=$array[0]; 5 $var2=$array[1]; 6 $var3=$array[2]; 7 $var4=$array[3]; 8 9 ?>
- Pero usando list se pode facer:
1 <?php 2 $array = array("un", "dous", "tres", "catro"); 3 list($var1,$var2,$var3,$var4)=$array; 4 ?>
- Incluso se poden 'saltar' elementos do array:
1 <?php 2 $array = array("un", "dous", "tres", "catro"); 3 list(,$var2,,$var4)=$array; 4 ?>
Función explode
- Función explode: Convirte un conxunto de valores nun array.
- O conxunto de valores virán nunha única variable separados por algún carácter (espazo en branco, coma,...)
- Será necesario indicar na chamada á función o carácter de separación.
- Por exemplo:
1 <?php 2 $datos= "un | dous | tres | catro"; 3 $array= explode('|', $datos); 4 print_r($array); 5 ?>
- Dará como resultado:
1 Array ( [0] => un 2 [1] => dous 3 [2] => tres 4 [3] => catro 5 )
Función implode
- Función implode: Fai o proceso contrario á función anterior. Converte un array a unha variable de cadea no que o seu valor é o conxunto de valores do array unidos cun carácter que ven indicado na función.
- Por exemplo:
1 <?php 2 $array = ['casa','can','amigo']; 3 $cadea= implode('|', $array); 4 echo $cadea; 5 ?>
- Dará como resultado:
1 casa|can|amigo
Verificando os datos dun formulario
- Uhna forma rápida de verificar que certos datos dun formulario teñan información sería:
1 <?php 2 // Campos obrigatorios 3 $campos_obrigatorios = array('txtNome', 'txtEmail'); 4 5 // Comprobamos que os campos obrigatorios teñan datos 6 $erro = false; 7 foreach ($campos_obrigatorios as $campo) { 8 if (empty($_POST[$campo])) $erro = true; 9 } 10 11 if ($erro) { 12 // Non existe algún dos campos obrigatorios 13 }
-- Ángel D. Fernández González -- (2016).
