PHP Arrays

De MediaWiki
Ir a la navegación Ir a la búsqueda

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.
Nota:Pódese empregar para outros tipos de variables.
  • 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 int e string. 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 a int. 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 exemplo 3.5 a 3, 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 null como clave está obsoleto. Debe empregarse explicitamente unha cadea baleira se iso é realmente o que se pretende.
  • 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([]) devolve 0. Non se debe chamar a count() sobre unha variable non definida nin sobre un valor que non sexa contable. En PHP 8.x, chamar a count() cun valor non contable provoca un TypeError.
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'.
Php matrices 1.jpg
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 null cando 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 normalmente foreach. 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) !== null para detectar o final. Non é correcto utilizar unha condición como while (current($produtos)), xa que un valor válido como 0, false ou 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.
  • 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 foreach percorre o array independentemente do punteiro interno empregado por funcións como current(), next() ou key(). Ademais, foreach non modifica ese punteiro interno. Por ese motivo, para obter o elemento que se está procesando debemos empregar directamente as variables declaradas no propio foreach.


  • 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

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 true cando 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

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

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 foreach percorre o array independentemente do punteiro interno empregado por current(), next() ou key(); para acceder ao elemento actual debemos empregar as variables do propio foreach.


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.
Php operadores 7.jpg
Nota: Información obtida de php.net.



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).