Diferencia entre revisiones de «PHP Arrays»
Ir a la navegación
Ir a la búsqueda
Nota: Información obtida de php.net.
| (No se muestra una edición intermedia del mismo usuario) | |||
| Línea 338: | Línea 338: | ||
: Como se pode comprobar nunca amosa o dato 'coche' xa que ao eliminar un elemento a función count se decrementa. | : Como se pode comprobar nunca amosa o dato 'coche' xa que ao eliminar un elemento a función count se decrementa. | ||
| + | |||
| + | : Nestes caso é mellor traballar con foreach (visto a continuación) | ||
== Accedendo aos valores gardados no array (3ª forma: punteiro interno) == | == Accedendo aos valores gardados no array (3ª forma: punteiro interno) == | ||
| Línea 677: | Línea 679: | ||
: En caso de que non nos importe o valor da clave podemos ordenar o array coa [http://php.net/manual/es/function.sort.php función sort] | : En caso de que non nos importe o valor da clave podemos ordenar o array coa [http://php.net/manual/es/function.sort.php función sort] | ||
| + | |||
| + | |||
| + | <br /> | ||
| + | === Función array_map === | ||
| + | |||
| + | * [https://www.php.net/manual/es/function.array-map.php Función array_map]: Aplica unha función de devolución de chamada (callback) a cada un dos elementos dun ou varios arrays. É moi útil para transformar os datos dun array sen ter que empregar un bucle foreach explícito. | ||
| + | : É dicir, por cada un dos elementos do array aplica unha función no que se modifica ese dato do array e devolve o array modificado. | ||
| + | |||
| + | : Por exemplo: | ||
| + | |||
| + | ::<syntaxhighlight lang="php" line enclose="div" highlight="" > | ||
| + | $numeros = [1, 2, 3, 4, 5]; | ||
| + | $resultado = array_map(function(int $n): int { | ||
| + | return $n * 2; | ||
| + | }, $numeros); | ||
| + | |||
| + | var_dump($resultado); | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | : Devolverá: | ||
| + | :: | ||
| + | Array | ||
| + | ( | ||
| + | [0] => 2 | ||
| + | [1] => 4 | ||
| + | [2] => 6 | ||
| + | [3] => 8 | ||
| + | [4] => 10 | ||
| + | ) | ||
<br /> | <br /> | ||
| Línea 695: | Línea 727: | ||
<br /> | <br /> | ||
| + | |||
== Arrays multidimensionais == | == Arrays multidimensionais == | ||
Revisión actual del 11:01 8 oct 2026
Sumario
- 1 Introdución
- 2 Accedendo aos valores gardados no array (para programadores)
- 3 Accedendo aos valores gardados no array (1ª forma)
- 4 Declaración dun array: valores claves
- 5 Eliminando, modificando ou engadindo valores a un array
- 6 Accedendo aos valores gardados no array (2ª forma)
- 7 Accedendo aos valores gardados no array (3ª forma: punteiro interno)
- 8 Accedendo aos valores gardados no array (4ª forma - A EMPREGAR)
- 9 Funcións predefinidas relacionadas cos Arrays
- 10 Arrays multidimensionais
- 11 Operadores para arrays
- 12 Accedendo a elementos dun array devoltos dende funcións
- 13 Exercicios propostos
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.
Compatibilidade con PHP 8.5: nesta unidade emprégase a sintaxe e o comportamento actual de PHP 8.5. Evítanse construcións eliminadas ou obsoletas, como each(), o acceso a arrays mediante chaves {}, as claves null e as conversións implícitas de claves float con perda de precisión.
Un array pódese crear empregando a sintaxe curta con corchetes [], que é a forma habitual no PHP actual. A sintaxe clásica mediante array() continúa sendo válida, pero nos exemplos desta unidade empregaremos preferentemente [].
1 <?php 2 $array = [ 3 clave => valor, 4 clave2 => valor2, 5 clave3 => valor3, 6 ]; 7 ?>
Vexamos un exemplo de parte dos ingredientes dunha receita:
1 <?php 2 $ingredientes = [ 3 0 => "améndoa", 4 1 => "fresas", 5 ]; 6 ?>
- 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 ?>
- A este tipo de array chámase array asociativo.
Accedendo 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 = ["un", "dous", "tres", "catro"]; 3 printf("<br>"); 4 var_dump($array); 5 printf("<br>"); 6 print_r($array); 7 ?>
- O resultado:
array(4) { [0]=> string(2) "un" [1]=> string(4) "dous" [2]=> string(4) "tres" [3]=> string(5) "catro" } // RESULTADO var_dump Array ( [0] => un [1] => dous [2] => tres [3] => catro ) // RESULTADO print_r
Accedendo aos valores gardados no array (1ª forma)
- Para acceder aos valores dun array empréganse corchetes:
- $variable_array[clave]
- Importante: A sintaxe con chaves, por exemplo
$array{0}, xa non é válida dende PHP 8.0. Polo tanto, en PHP 8.5 débense empregar sempre corchetes.
- 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.
- PHP admite como claves dun array valores de tipo
intestring. Algúns outros tipos poden ser convertidos automaticamente, pero é recomendable evitar conversións implícitas que poidan perder información.
- Así:
- String: se a cadea contén un enteiro decimal válido, por exemplo
"8", convértese aint. Unha cadea como"08"mantense como cadea. - Boolean: convértese a
int(true = 1;false = 0). - Float: convértese a
int, eliminando a parte decimal. Dende PHP 8.1, se a conversión implica perda de precisión, por exemplo3.5a3, xérase un aviso de obsolescencia. Por este motivo débese evitar empregar números decimais como claves. - null: tradicionalmente convertíase á cadea baleira, pero en PHP 8.5 o uso de
nullcomo clave está obsoleto. Debe empregarse explicitamente unha cadea baleira se iso é realmente o que se pretende.
- String: se a cadea contén un enteiro decimal válido, por exemplo
- Se non indicamos a clave, PHP asignará automaticamente a seguinte clave enteira dispoñible.
- Vexamos un exemplo:
1 <?php 2 $disco = [ 3 1 => '32454KAS12', 4 'capacidade' => '500GB', 5 '3500rpm', 6 'marca' => 'seagate', 7 3 => 'SATA', 8 ]; 9 10 printf("O primeiro dato é o número de serie: %s<br>", $disco[1]); 11 printf("A capacidade é: %s<br>", $disco['capacidade']); 12 printf("A velocidade ten a clave numérica 2: %s<br>", $disco[2]); 13 printf("A marca é: %s<br>", $disco['marca']); 14 printf("O tipo de conector ten a clave numérica 3: %s<br>", $disco[3]); 15 ?>
- Como podemos comprobar no exemplo anterior é posible ter un array con claves mixtas, é dicir, claves de tipo cadea e claves numéricas.
- Outro exemplo:
1 <?php 2 $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:
Array ( [0] => améndoa [1] => fresas [2] => azucre [3] => fariña ) Despois de eliminar o dato con clave 2: Array ( [0] => améndoa [1] => fresas [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 = [1 => 'uno', 2 => 'dos', 3 => 'tres']; 3 unset($a[2]); 4 /* producirá un array con estes índices 5 $a = [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 = [1 => 'uno', 2 => 'dos', 3 => 'tres']; 3 unset($a[2]); 4 $a = array_values($a); 5 /* producirá un array con estes índices 6 $a = [0 => 'uno', 1 => '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:
Array ( [0] => améndoa [1] => fresas [2] => azucre [3] => fariña ) Despois de modificar o dato con clave 2: 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:
Array ( [0] => améndoa [1] => fresas [2] => azucre [3] => fariña ) Despois de engadir un novo ingrediente con clave 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:
Array ( [nome] => Juan Francisco [direccion] => C/ Rúa de alá nº5 [telefono] => 981121212 ) Despois de engadir un novo dato: Array ( [nome] => Juan Francisco [direccion] => C/ Rúa de alá nº5 [telefono] => 981121212 [idade] => 52 )
Accedendo aos valores gardados no array (2ª forma)
- Podemos facer uso da función count() para obter o número de elementos dun array.
- Vexamos un exemplo:
1 <?php 2 $datos = ['casa', 'can', 'amigo']; 3 $total = count($datos); 4 5 for ($cont = 0; $cont < $total; $cont++) { 6 printf("Dato: %s<br>", $datos[$cont]); 7 } 8 ?>
- Esta forma de percorrer o array mediante un índice numérico só é axeitada cando as claves son enteiras consecutivas, normalmente comezando en 0. Para percorrer arrays en xeral empregaremos
foreach.
- Nota:
count([])devolve0. Non se debe chamar acount()sobre unha variable non definida nin sobre un valor que non sexa contable. En PHP 8.x, chamar acount()cun valor non contable provoca unTypeError.
- Se necesitamos comprobar previamente o tipo podemos empregar is_array() ou comprobar que o valor implementa
Countable.
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.
- Nestes caso é mellor traballar con foreach (visto a continuación)
Accedendo aos valores gardados no array (3ª forma: punteiro interno)
- PHP dispón dun punteiro interno asociado a cada array. Existen varias funcións que permiten consultar ou modificar a súa posición:
- reset(): sitúa o punteiro no primeiro elemento e devolve o seu valor.
- current(): devolve o valor do elemento actual sen mover o punteiro.
- key(): devolve a clave do elemento actual; devolve
nullcando o punteiro está fóra dos límites do array. - next(): avanza o punteiro unha posición e devolve o novo valor.
- prev(): retrocede o punteiro unha posición e devolve o valor.
- Importante: A antiga función
each()foi eliminada en PHP 8.0 e non se pode empregar en PHP 8.5. Para percorrer arrays empregaremos normalmenteforeach. As funcións do punteiro interno quedan para casos concretos nos que sexa necesario controlar manualmente a posición.
- Vexamos un exemplo no que percorremos manualmente un array co seu punteiro interno:
1 <?php 2 $produtos = [ 3 'produto_a' => 100, 4 'produto_b' => 150, 5 'produto_c' => 0, 6 'produto_d' => 250, 7 ]; 8 9 reset($produtos); 10 11 while (key($produtos) !== null) { 12 $clave = key($produtos); 13 $prezo = current($produtos); 14 15 printf("Produto: %s - Prezo: %s<br>", $clave, $prezo); 16 17 next($produtos); 18 } 19 ?>
- Empregamos
key($produtos) !== nullpara detectar o final. Non é correcto utilizar unha condición comowhile (current($produtos)), xa que un valor válido como0,falseou unha cadea baleira faría rematar o bucle antes de tempo.
- Na práctica, para este exemplo é máis sinxelo e lexible empregar
foreach, que veremos no seguinte apartado.
Accedendo aos valores gardados no array (4ª forma - A EMPREGAR)
- NOTA: Esta vai ser a forma na que percorramos un array.
- 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
foreach. - Na segunda forma recuperamos a clave e o valor de cada elemento do array en cada iteración do bucle
foreach.
- 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:
O valor é:casa O valor é:can O valor é:amigo 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:
O valor da clave é: 0 O valor é: casa O valor da clave é: 1 O valor é: can O valor da clave é: 2 O valor é: amigo O valor da clave é: 3 O valor é: coche
- O bucle
foreachpercorre o array independentemente do punteiro interno empregado por funcións comocurrent(),next()oukey(). Ademais,foreachnon modifica ese punteiro interno. Por ese motivo, para obter o elemento que se está procesando debemos empregar directamente as variables declaradas no propioforeach.
- Ao igual que có if, podemos empregar outra sintaxe cando estamos a mesturar código php e código html.
- Este sería un exemplo de cómo facelo.
<ul> <?php foreach ($array as $elemento): ?> <li><?php echo htmlspecialchars($elemento, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></li> <?php endforeach; ?> </ul>
Eliminando elementos do array
- Desta forma podemos eliminar os elementos do array dentro do bucle sen que pase nada.
- Por exemplo:
1 <?php 2 3 $datos = ['casa','can','amigo','coche']; 4 5 foreach($datos as $clave => $valor){ 6 if ($clave==1){ 7 unset($datos[$clave]); 8 } 9 else{ 10 printf("O valor da clave é: %s<br />",$clave); 11 printf("O valor é: %s<br />",$valor); 12 } 13 } 14 ?>
- Dará como resultado:
O valor da clave é: 0 O valor é: casa O valor da clave é: 2 O valor é: amigo O valor da clave é: 3 O valor é: coche
- NOTA: Lembrar que xa vimos como eliminar un elemento do array directamente.
Funcións predefinidas relacionadas cos Arrays
- Existen multitude de funcións que nos van permitir traballar con arrays.
- Algunha delas son:
Función in_array
- Función in_array: Permite saber se un dato dado existe nun array. É recomendable empregar o terceiro parámetro a
truecando queremos evitar conversións automáticas de tipos durante a comparación.
- Por exemplo:
1 <?php 2 function existeEnArray(string $datoBuscar, array $array): string { 3 if (in_array($datoBuscar, $array, true)) { 4 return "Existe $datoBuscar no array"; 5 } 6 7 return "Non existe $datoBuscar no array"; 8 } 9 10 $array = ["un", "dous", "tres", "catro"]; 11 echo existeEnArray('tres',$array); 12 echo '<br />'; 13 echo existeEnArray('cinco',$array); 14 15 16 ?>
- Devolverá:
Existe tres no array Non existe cinco no array
Función array_keys
- Función array_keys: Permite obter as keys dun array.
- Por exemplo:
1 <?php 2 $array = ["un", "dous", "tres", "catro"]; 3 foreach (array_keys($array) as $k) { 4 echo $k . '-'; 5 } 6 ?>
- Devolverá:
0-1-2-3-
Desestruturación de arrays: list() e []
- list() permite asignar a varias variables os valores dun array dunha forma compacta.
- No PHP actual tamén podemos empregar a sintaxe curta
[], que adoita ser máis lexible.
- Por exemplo:
1 <?php 2 $array = ["un", "dous", "tres", "catro"]; 3 4 // Forma clásica 5 list($var1, $var2, $var3, $var4) = $array; 6 7 // Sintaxe curta, recomendada no código moderno 8 [$var1, $var2, $var3, $var4] = $array; 9 ?>
- Podemos omitir posicións que non nos interesen:
1 <?php 2 $array = ["un", "dous", "tres", "catro"]; 3 [, $var2, , $var4] = $array; 4 ?>
- A desestruturación tamén pode empregarse con arrays asociativos indicando explicitamente as claves:
1 <?php 2 $persoa = [ 3 'nome' => 'Ana', 4 'idade' => 25, 5 ]; 6 7 ['nome' => $nome, 'idade' => $idade] = $persoa; 8 9 printf("Nome: %s - Idade: %d", $nome, $idade); 10 ?>
- Nota PHP 8.5: desestruturar un valor que non sexa un array pode xerar un aviso. Polo tanto, debemos asegurarnos de que o valor que imos desestruturar é realmente un array.
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:
Array ( [0] => un [1] => dous [2] => tres [3] => catro )
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:
casa|can|amigo
Función asort
- A función asort permite ordenar un array mantendo a asociación de índices. Quere isto dicir que se ordena o dato, pero non a clave asociada ao dato.
- Devolve true en caso de éxito e false se houbo algún erro.
- Por exemplo:
1 <?php 2 $array = [1 => 'casa',2 => 'can',3 => 'amigo']; 3 if (asort($array)){ 4 foreach ($array as $key => $valor){ 5 printf("Clave:%d-----Valor:%s<br />",$key,$valor); 6 } 7 } 8 else { 9 echo "Houbo un erro ao ordenar..."; 10 } 11 ?>
- Dará como resultado:
Clave:3-----Valor:amigo Clave:2-----Valor:can Clave:1-----Valor:casa
- Normalmente este tipo de ordenación se fai con arrays asociativos (de tipo 'key => value' na súa definición) no que non queremos perder a asociación das claves cos seus valores.
- En caso de que non nos importe o valor da clave podemos ordenar o array coa función sort
Función array_map
- Función array_map: Aplica unha función de devolución de chamada (callback) a cada un dos elementos dun ou varios arrays. É moi útil para transformar os datos dun array sen ter que empregar un bucle foreach explícito.
- É dicir, por cada un dos elementos do array aplica unha función no que se modifica ese dato do array e devolve o array modificado.
- Por exemplo:
1 $numeros = [1, 2, 3, 4, 5]; 2 $resultado = array_map(function(int $n): int { 3 return $n * 2; 4 }, $numeros); 5 6 var_dump($resultado);
- Devolverá:
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
- Outras funcións relacionadas:
Arrays multidimensionais
- Os arrays vistos ata o de agora teñen unha dimensión.
- Un array multidimensional é un array que a súa vez pode ter outros arrays para cada un dos elementos do array.
Accedendo ao array
- A dimensión dun array indica o número de índices que se necesitan para acceder a un elemento do array.
- Un array bidimensional necesita dous índices para acceder.
- Un array tridimensional necesita tres índices para acceder.
- Vexamos un exemplo:
1 <?php 2 $coches = array 3 ( 4 array("Volvo",1990,'33500 euros'), 5 array("BMW",1980,'43000 euros'), 6 array("Opel",1995,'15000 euros'), 7 array("Peugeot",1997,'13200 euros') 8 ); 9 10 echo "Marca:" . $coches[0][0].": ano saída: ".$coches[0][1].", prezo: ".$coches[0][2].".<br>"; 11 echo "Marca:" . $coches[1][0].": ano saída: ".$coches[1][1].", prezo: ".$coches[1][2].".<br>"; 12 echo "Marca:" . $coches[2][0].": ano saída: ".$coches[2][1].", prezo: ".$coches[2][2].".<br>"; 13 echo "Marca:" . $coches[3][0].": ano saída: ".$coches[3][1].", prezo: ".$coches[3][2].".<br>"; 14 ?>
- Produce de saída:
1 Marca:Volvo: ano saída: 1990, prezo: 33500 euros. 2 Marca:BMW: ano saída: 1980, prezo: 43000 euros. 3 Marca:Opel: ano saída: 1995, prezo: 15000 euros. 4 Marca:Peugeot: ano saída: 1997, prezo: 13200 euros.
- Podemos facer uso das formas anteriores para percorrer o array multidimensional, tendo en conta agora, que cada elemento do array ven ser outro array.
- Vexamos isto aplicado ao exemplo anterior:
1 foreach($coches as $coche){ 2 echo "Un novo coche:<br />"; 3 foreach ($coche as $valor){ 4 printf("%s -",$valor); 5 } 6 echo "<br />"; 7 }
- Produce de saída:
1 Un novo coche: 2 Volvo -1990 -33500 euros - 3 Un novo coche: 4 BMW -1980 -43000 euros - 5 Un novo coche: 6 Opel -1995 -15000 euros - 7 Un novo coche: 8 Peugeot -1997 -13200 euros -
- Podemos facer unha modificación ao exercicio anterior e engadir un campo clave de tipo cadea:
1 $coches = array 2 ( 3 array("Marca" => "Volvo","Ano saída" => 1990,"Prezo"=>'33500 euros'), 4 array("Marca" => "BMW","Ano saída" => 1980,"Prezo"=>'43000 euros'), 5 array("Marca" => "Opel","Ano saída" => 1995,"Prezo"=>'15000 euros'), 6 array("Marca" => "Peugeot","Ano saída" => 1997,"Prezo"=>'13200 euros') 7 ); 8 9 foreach($coches as $coche){ 10 echo "Un novo coche:<br />"; 11 foreach ($coche as $clave=>$valor){ 12 printf("; %s : %s",$clave,$valor); 13 } 14 echo "<br />"; 15 }
- Produce de saída:
1 Un novo coche: 2 ; Marca : Volvo; Ano saída : 1990; Prezo : 33500 euros 3 Un novo coche: 4 ; Marca : BMW; Ano saída : 1980; Prezo : 43000 euros 5 Un novo coche: 6 ; Marca : Opel; Ano saída : 1995; Prezo : 15000 euros 7 Un novo coche: 8 ; Marca : Peugeot; Ano saída : 1997; Prezo : 13200 euros
Borrando datos do array
- Este é un exemplo utilizando a forma foreach para percorrer o array.
- Podería facerse doutras formas.
- Neste exemplo temos un array cos seguintes datos:
$coches = array ( array("Volvo",1990,'33500 euros'), array("BMW",1980,'43000 euros'), array("Opel",1995,'15000 euros'), array("Peugeot",1997,'13200 euros') );
- O que imos facer no exemplo é borrar o coche con clave 1 (o coche BMW) e imos borrar o dato do ano de lanzamento de todos os arrays (datos 1990,1980,1995,1997)
1 <?php 2 $coches = array 3 ( 4 array("Volvo",1990,'33500 euros'), 5 array("BMW",1980,'43000 euros'), 6 array("Opel",1995,'15000 euros'), 7 array("Peugeot",1997,'13200 euros') 8 ); 9 10 // Amosamos os datos 11 foreach($coches as $key=>$value){ 12 echo "<br />Coche num.:" . $key . "<br />"; 13 foreach($value as $key_datos => $value_datos){ 14 echo ' ' . $key_datos . "---->" . $value_datos; 15 } 16 17 } 18 19 20 echo "<br /><br />"; 21 22 // Borramos o coche2 23 foreach($coches as $key=>$value){ 24 if ($key==1) { // Borramos o coche2 25 unset($coches[$key]); // Borramos a fila 1 (empeza en 0) 26 } 27 else { 28 foreach($value as $key_datos => $value_datos){ 29 if ($key_datos==1) { // Borra o ano de lanzamento 30 unset($coches[$key][$key_datos]); // Borramos a columna ano de lanzamento 31 } 32 } 33 } 34 35 } 36 37 foreach($coches as $key=>$value){ 38 echo "<br />Coche num.:" . $key . "<br />"; 39 foreach($value as $key_datos => $value_datos){ 40 echo ' ' . $key_datos . "---->" . $value_datos; 41 } 42 43 } 44 ?>
- Liña 25: Nesta liña borra o coche con clave 1 (o segundo coche). Fixarse como para borrar un elemento do array temos que facelo usando o nome do array e a clave asociada ao elemento.
- Liña 30: unset($coches[$key][$key_datos]);
- Nesta liña borramos o dato 'ano de lanzamento' de cada coche.
- $value => é o array cos datos. Por exemplo, no coche con índice 0 ten de valor: array("Volvo",1990,'33500 euros')
- O que facemos no segundo bucle foreach é percorrer dito array ,polo tanto as variables $key_datos e $value_datos van ter de valor:
- 0 => "Volvo"; 1 => 1990; 2 => '33500 euros'
- Fixarse como para eliminar un elemento do array dentro doutro array temos que facer a referencia dende o array pai ($coches).
- Non vale poñer: unset($value[$key_datos]);
- Lembrar que
foreachpercorre o array independentemente do punteiro interno empregado porcurrent(),next()oukey(); para acceder ao elemento actual debemos empregar as variables do propioforeach.
- Dará como resultado:
Coche num.:0 0---->Volvo 1---->1990 2---->33500 euros Coche num.:1 0---->BMW 1---->1980 2---->43000 euros Coche num.:2 0---->Opel 1---->1995 2---->15000 euros Coche num.:3 0---->Peugeot 1---->1997 2---->13200 euros Borramos o coche número 1 e o dato 'ano de lanzamento' de todos. Coche num.:0 0---->Volvo 2---->33500 euros Coche num.:2 0---->Opel 2---->15000 euros Coche num.:3 0---->Peugeot 2---->13200 euros
Engadido datos ao array
- Imaxinemos que queremos engadir o seguinte dato ao array anterior:
- "Lancia", 1998, '10212 euros'
- Partindo do exemplo anterior:
1 $dato_novo = ["Lancia", 1998, "10212 euros"]; 2 $coches[]=$dato_novo;
- Outra forma é utilizar a función array_push(). Para engadir un único elemento, a sintaxe
$array[] = $valoré máis directa e adoita ser a opción preferida.array_push()resulta útil cando queremos engadir varios elementos nunha soa chamada.
1 $dato_novo = ["Lancia", 1998, "10212 euros"]; 2 array_push($coches, $dato_novo);
- En ambos casos dará como resultado:
Coche num.:0 0---->Volvo 2---->33500 euros Coche num.:2 0---->Opel 2---->15000 euros Coche num.:3 0---->Peugeot 2---->13200 euros Coche num.:4 0---->Lancia 1---->1998 2---->10212 euros
Operadores para arrays
- No seguinte cadro aparecen os operadores para arrays.
Accedendo a elementos dun array devoltos dende funcións
- Podemos acceder directamente a un elemento dun array devolto por unha función empregando os corchetes sobre o resultado da chamada.
1 <?php 2 function getArray(): array { 3 return [1, 2, 3]; 4 } 5 6 $segundoElemento = getArray()[1]; 7 8 echo $segundoElemento; // 2 9 ?>
- Esta sintaxe é plenamente válida en PHP 8.5 e evita crear unha variable temporal cando só necesitamos acceder a un elemento concreto.
Exercicios propostos
- Exercicio 1: Crea unha función que amose a media dunha serie de números gardados nun array fora da función.
- Pista: Busca array_sum
- Exercicio 2: Crea unha función que amose en forma de lista os datos dos usuarios gardados nun array asociativo cos datos: nome, idade e correo. Define dito array con 3 usuarios e chama a función.
- A función terá que comprobar se o array ten datos. En caso contrario amosará un erro.
- Exercicio 3: Partindo do array do exercicio anterior, engade un novo usuario ao array, modifica un usuario e borra un usuario. Chama a función anterior para amosar os datos modificados.
- Exercicio 4: Partindo dun array onde están definidos as cores, amosa todas as cores nunha única liña separando cada cor por unha coma (non percorras os elementos do array). Despois comproba se a cor verde está no array e encaso de que non estea, engádeo.
- Exercicio 5: Crea unha función que dado un parámetro de tipo cadea, podas enviar varios datos separados por comas. A función debe eliminar todas as letras 'a' que aparezan no parámetro e devolver un array coas diferentes palabras. Debe verificar que as palabras non se repiten. En caso de repetirse deben ser eliminadas as repetidas.
- Pista: Consulta array_unique.
Solución Exercicios propostos
- Solución Exercicio 1: Crea unha función que amose a media dunha serie de números gardados nun array fora da función.
- Nota: Busca array_sum
<!DOCTYPE html> <html> <head> <title>Exemplo de uso de array con función en PHP</title> </head> <body> <h1>Calcular o promedio dun array de números</h1> <?php /** * Calcula o promedio dun array de números. * * Esta función recibe un array de números: * - Se o array contén elementos, devolve o promedio (media aritmética). * - Se o array está baleiro, devolve `null`. * * @param array $numeros Array de números (inteiros ou decimais) para calcular o promedio. * * @return float|null Devolve o promedio como número decimal se o array non está baleiro. * Devolve `null` se o array está baleiro. */ function calcularPromedio(array $numeros): ?float { $total = count($numeros); // Calcular o número total de elementos no array $suma = array_sum($numeros); // Calcular a suma dos números no array if ($total > 0) { $promedio = $suma / $total; // Calcular o promedio return $promedio; } else { return null; // Devolver null se o array está baleiro } } // Declarar un array de números $numeros = [5, 10, 15, 20, 25]; // Chamar á función para calcular o promedio $resultado = calcularPromedio($numeros); if ($resultado !== null) { echo "O promedio dos números é: $resultado"; // Mostrará o promedio } else { echo "O array está baleiro."; } ?> </body> </html>
- Solución Exercicio 2: Crea unha función que amose en forma de lista os datos dos usuarios gardados nun array asociativo cos datos: nome, idade e correo. Define dito array con 3 usuarios e chama a función.
- A función terá que comprobar se o array ten datos. En caso contrario amosará un erro.
<!DOCTYPE html> <html> <head> <title>Exemplo de uso de array asociativo con función en PHP (con comprobación)</title> </head> <body> <h1>Amosar os elementos dun array asociativo (con comprobación)</h1> <?php // Definir un array asociativo con información de usuarios $usuarios = [ 'usuario1' => [ 'nome' => 'Ana', 'idade' => 25, 'correo' => 'ana@example.com' ], 'usuario2' => [ 'nome' => 'Carlos', 'idade' => 30, 'correo' => 'carlos@example.com' ], 'usuario3' => [ 'nome' => 'Eva', 'idade' => 28, 'correo' => 'eva@example.com' ] ]; /** * Amosar unha lista de usuarios en formato HTML. * * Esta función recibe un array de usuarios. Para cada usuario, mostra: * - Nome * - Idade * - Correo electrónico * * Se o array está baleiro, imprime unha mensaxe indicándoo. * * @param array $usuarios Array asociativo de usuarios. Cada elemento debe ser un array con claves: * - 'nome' => string * - 'idade' => int * - 'correo'=> string * * @return void A función non devolve ningún valor, só imprime a saída por pantalla. */ function amosarUsuarios(array $usuarios): void { if (empty($usuarios)) { echo "O array de usuarios está baleiro."; } else { echo "<ul>"; foreach ($usuarios as $usuario => $info) { echo "<li>"; echo "Nome: " . $info['nome'] . "<br>"; echo "Idade: " . $info['idade'] . "<br>"; echo "Correo: " . $info['correo']; echo "</li>"; } echo "</ul>"; } } // Chamar á función para amosar a información de usuarios amosarUsuarios($usuarios); ?> </body> </html>
- Solución Exercicio 3: Partindo do array do exercicio anterior, engade un novo usuario ao array, modifica un usuario e borra un usuario. Chama a función anterior para amosar os datos modificados.
<!DOCTYPE html> <html> <head> <title>Exemplo de modificación de datos en un array en PHP</title> </head> <body> <h1>Modificar datos en un array asociativo</h1> <?php // Definir un array asociativo con información de usuarios $usuarios = [ 'usuario1' => [ 'nome' => 'Ana', 'idade' => 25, 'correo' => 'ana@example.com' ], 'usuario2' => [ 'nome' => 'Carlos', 'idade' => 30, 'correo' => 'carlos@example.com' ], 'usuario3' => [ 'nome' => 'Eva', 'idade' => 28, 'correo' => 'eva@example.com' ] ]; // Engadir un novo usuario $novoUsuario = [ 'nome' => 'David', 'idade' => 35, 'correo' => 'david@example.com' ]; $usuarios['usuario4'] = $novoUsuario; // Modificar os datos dun usuario existente $usuarios['usuario2']['idade'] = 32; // Eliminar un usuario unset($usuarios['usuario3']); ?> </body> </html>
- Solución Exercicio 4: Partindo dun array onde están definidos as cores, amosa todas as cores nunha única liña separando cada cor por unha coma (non percorras os elementos do array). Despois comproba se a cor verde está no array e encaso de que non estea, engádeo.
<!DOCTYPE html> <html> <head> <title>Exemplo de uso de implode e in_array en PHP con engadido de cor</title> </head> <body> <h1>Buscar e engadir unha cor nun array utilizando implode e in_array</h1> <?php // Definir un array de cores $cores = ["vermello", "azul", "verde", "amarelo", "laranxa"]; // Convertir o array de cores nunha cadea coma unha lista $cadeaCores = implode(", ", $cores); // Amosar a lista de cores echo "Lista de cores: $cadeaCores<br>"; // Valor a buscar no array $valorABuscar = "verde"; // Comprobar se o valor está no array if (in_array($valorABuscar, $cores, true)) { echo "O valor '$valorABuscar' está no array de cores."; } else { echo "O valor '$valorABuscar' non está no array de cores. Engadíndoo...<br>"; // Engadir o valor ao array de cores $cores[] = $valorABuscar; // Actualizar a cadea de cores $cadeaCores = implode(", ", $cores); echo "Nova lista de cores: $cadeaCores"; } ?> </body> </html>
- Solución Exercicio 5: Crea unha función que dado un parámetro de tipo cadea, podas enviar varios datos separados por comas. A función debe eliminar todas as letras 'a' que aparezan no parámetro e devolver un array coas diferentes palabras. Debe verificar que as palabras non se repiten. En caso de repetirse deben ser eliminadas as repetidas.
- Pista: Consulta array_unique.
<!DOCTYPE html> <html> <head> <title>Exemplo de función en PHP para eliminar 'a' e devolver palabras únicas</title> </head> <body> <h1>Eliminar 'a' e devolver palabras únicas</h1> <?php /** * Elimina a letra 'a' dunha cadea e devolve palabras únicas. * * Esta función realiza os seguintes pasos: * 1. Elimina todas as letras 'a' da cadea recibida. * 2. Divide a cadea resultante en palabras usando a coma (',') como separador. * 3. Elimina as palabras duplicadas. * 4. Devolve un array con palabras únicas. * * @param string $cadea Cadea de texto que será procesada. * * @return array Array de palabras únicas resultantes de eliminar a letra 'a' e separar por comas. */ function eliminarLetraA(string $cadea): array { // Eliminar todas as letras 'a' da cadea $cadeaSenA = str_replace('a', '', $cadea); // Dividir a cadea sen 'a' en palabras usando coma como separador $palabras = explode(',', $cadeaSenA); // Eliminar palabras duplicadas $palabrasUnicas = array_unique($palabras); // Devolver as palabras únicas como un array return $palabrasUnicas; } // Cadea de entrada $cadeaEntrada = "hola,amigo,amigo,hasta,luego"; // Chamar á función e obter o array de palabras únicas $resultado = eliminarLetraA($cadeaEntrada); // Amosar o resultado echo "Cadea de entrada: $cadeaEntrada<br>"; echo "Palabras únicas sen 'a': " . implode(', ', $resultado); ?> </body> </html>
-- Ángel D. Fernández González -- (2025).
