Diferencia entre revisiones de «PHP Arrays»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 7 ediciones intermedias del mismo usuario)
Línea 6: Línea 6:
 
: Cabe sinalar que dentro dun caixón poderíamos ter outra cómoda con máis caixóns a súa vez.
 
: Cabe sinalar que dentro dun caixón poderíamos ter outra cómoda con máis caixóns a súa vez.
  
 +
<div class="alert alert-info">
 +
'''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 <code>each()</code>, o acceso a arrays mediante chaves <code>{}</code>, as claves <code>null</code> e as conversións implícitas de claves <code>float</code> con perda de precisión.
 +
</div>
  
−
Un array pódese crear có construtor da linguaxe [http://php.net/manual/es/function.array.php array()] desta forma:
+
 
 +
Un array pódese crear empregando a sintaxe curta con corchetes <code>[]</code>, que é a forma habitual no PHP actual. A sintaxe clásica mediante [https://www.php.net/manual/es/function.array.php array()] continúa sendo válida, pero nos exemplos desta unidade empregaremos preferentemente <code>[]</code>.
  
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
−
<?php
+
<?php
−
array(
+
$array = [
 
     clave  => valor,
 
     clave  => valor,
 
     clave2 => valor2,
 
     clave2 => valor2,
 
     clave3 => valor3,
 
     clave3 => valor3,
−
    ...
+
];
−
    )
 
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
Línea 22: Línea 25:
 
Vexamos un exemplo de parte dos ingredientes dunha receita:
 
Vexamos un exemplo de parte dos ingredientes dunha receita:
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
−
<?php
+
<?php
−
$ingredientes = array(
+
$ingredientes = [
−
    0 => "améndoa",
 
−
    1 => "fresas",
 
−
);
 
−
 
 
−
// a partires de PHP 5.4
 
−
$ingredientes = [ // Leva corchetes e sen a palabra array
 
 
     0 => "améndoa",
 
     0 => "améndoa",
 
     1 => "fresas",
 
     1 => "fresas",
Línea 51: Línea 48:
 
* A este tipo de array chámase '''array asociativo'''.
 
* A este tipo de array chámase '''array asociativo'''.
  
−
== Accedendos aos valores gardados no array (para programadores) ==
+
== 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.
 
* 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.
Línea 63: Línea 60:
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
$array = array("un", "dous", "tres", "catro");
+
$array = ["un", "dous", "tres", "catro"];
 
printf("<br>");
 
printf("<br>");
 
var_dump($array);
 
var_dump($array);
Línea 79: Línea 76:
  
  
−
== Accedendos aos valores gardados no array (1ª forma) ==
+
== Accedendo aos valores gardados no array (1ª forma) ==
  
−
* Unha das formas para acceder aos valores do array é:  
+
* Para acceder aos valores dun array empréganse corchetes:
 
::* $variable_array'''['''clave''']'''
 
::* $variable_array'''['''clave''']'''
−
:: ou
 
−
::* $variable_array'''{'''clave'''}'''
 
  
−
: Pódense utilizar corchetes ou chaves indistintamente.
+
: <u>Importante:</u> A sintaxe con chaves, por exemplo <code>$array{0}</code>, xa non é válida dende PHP 8.0. Polo tanto, en PHP 8.5 débense empregar sempre corchetes.
  
 
: No exemplo anterior:
 
: No exemplo anterior:
Línea 118: Línea 113:
 
* Dita <u>clave pode ser '''numérica''' ou '''cadea'''</u> e os valores que podemos gardar poden ser de calquera tipo.
 
* Dita <u>clave pode ser '''numérica''' ou '''cadea'''</u> 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).
+
* PHP admite como claves dun array valores de tipo <code>int</code> e <code>string</code>. Algúns outros tipos poden ser convertidos automaticamente, pero é recomendable evitar conversións implícitas que poidan perder información.
 
: Así:
 
: Así:
−
::* Float: será convertido a un integer quitando a parte decimal.
+
::* String: se a cadea contén un enteiro decimal válido, por exemplo <code>"8"</code>, convértese a <code>int</code>. Unha cadea como <code>"08"</code> mantense como cadea.
−
::* String: se o string é un número válido (por exemplo "8") será convertido a integer.
+
::* Boolean: convértese a <code>int</code> (<code>true = 1</code>; <code>false = 0</code>).
−
::* Boolean: será convertido a integer (true = 1; false = 0)
+
::* Float: convértese a <code>int</code>, eliminando a parte decimal. Dende PHP 8.1, se a conversión implica perda de precisión, por exemplo <code>3.5</code> a <code>3</code>, xérase un aviso de obsolescencia. Por este motivo débese evitar empregar números decimais como claves.
−
::* null: será convertido a cadea valeira.
+
::* null: tradicionalmente convertíase á cadea baleira, pero en PHP 8.5 o uso de <code>null</code> como clave está obsoleto. Debe empregarse explicitamente unha cadea baleira se iso é realmente o que se pretende.
  
−
* Se non poñemos clave dará o valor seguinte a última numérica instroducida.
+
* Se non indicamos a clave, PHP asignará automaticamente a seguinte clave enteira dispoñible.
  
−
 
+
* Vexamos un exemplo:
−
* Vexamos uns exemplos:
 
  
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
−
<?php
+
<?php
−
          $disco = [
+
$disco = [
−
            1 => '32454KAS12',
+
    1 => '32454KAS12',
−
            'capacidad' => '500GB',
+
    'capacidade' => '500GB',
−
            '3500rpm',
+
    '3500rpm',
−
            'marca' => 'seagate',
+
    'marca' => 'seagate',
−
            3.5 => 'SATA'
+
    3 => 'SATA',
−
          ];
+
];
−
 
 
−
          printf("<br>");
 
−
          printf("O primeiro dato é o número de serie=> \$disco[1]:%s => A clave numérica é 1<br/>",$disco[1]);
 
−
          printf("O segundo dato=> \$disco['capacidad']:%s<br/>",$disco['capacidad']);
 
−
          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]);
 
−
          printf("O cuarto dato é a marca=> \$disco['marca']:%s<br/>",$disco['marca']);
 
−
          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]);
 
  
 +
printf("O primeiro dato é o número de serie: %s<br>", $disco[1]);
 +
printf("A capacidade é: %s<br>", $disco['capacidade']);
 +
printf("A velocidade ten a clave numérica 2: %s<br>", $disco[2]);
 +
printf("A marca é: %s<br>", $disco['marca']);
 +
printf("O tipo de conector ten a clave numérica 3: %s<br>", $disco[3]);
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: O resultado:
+
: Como podemos comprobar no exemplo anterior é posible ter un array con claves mixtas, é dicir, claves de tipo cadea e claves numéricas.
−
::<syntaxhighlight lang="html4strict" enclose="div" highlight="" >
 
−
O primeiro dato é o número de serie=> $disco[1]:32454KAS12 => A clave numérica é 1
 
−
O segundo dato=> $disco['capacidad']:500GB
 
−
O terceiro dato (velocidade) non leva clave polo que dalle a seguine numérica=> $disco[2]:3500rpm => A clave numérica é 2
 
−
O cuarto dato é a marca=> $disco['marca']:seagate
 
−
O quinto dato (tipo conector) a clave convírtese de float a integer=> $disco[3]:SATA A clave numérica é 3
 
−
</syntaxhighlight>
 
−
 
 
−
: Como podemos comprobar no exemplo anterior é posible ter un array con claves mixtas (cadea e numérica)
 
  
 
* Outro exemplo:
 
* Outro exemplo:
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
$array = array("un", "dous", "tres", "catro");
+
$array = ["un", "dous", "tres", "catro"];
 
printf("%s-%s-%s-%s",$array[0],$array[1],$array[2],$array[3]);
 
printf("%s-%s-%s-%s",$array[0],$array[1],$array[2],$array[3]);
 
?>
 
?>
Línea 213: Línea 196:
  
 
: Así:
 
: Así:
−
::<syntaxhighlight lang="java" line enclose="div" highlight="" >
+
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
$a = array(1 => 'uno', 2 => 'dos', 3 => 'tres');
+
$a = [1 => 'uno', 2 => 'dos', 3 => 'tres'];
 
unset($a[2]);
 
unset($a[2]);
 
/* producirá un array con estes índices
 
/* producirá un array con estes índices
−
   $a = array(1 => 'uno', 3 => 'tres');
+
   $a = [1 => 'uno', 3 => 'tres'];
 
*/
 
*/
 
?>
 
?>
 
</syntaxhighlight>  
 
</syntaxhighlight>  
  
−
: Se queremos que os índices se actualicen teremos que facer uso da función [http://php.net/manual/es/function.array-values.php array-values].
+
: Se queremos que os índices se actualicen teremos que facer uso da función [http://php.net/manual/es/function.array-values.php array_values].
  
 
: No exemplo anterior:
 
: No exemplo anterior:
  
−
::<syntaxhighlight lang="java" line enclose="div" highlight="4" >
+
::<syntaxhighlight lang="php" line enclose="div" highlight="4" >
 
<?php
 
<?php
−
$a = array(1 => 'uno', 2 => 'dos', 3 => 'tres');
+
$a = [1 => 'uno', 2 => 'dos', 3 => 'tres'];
 
unset($a[2]);
 
unset($a[2]);
 
$a = array_values($a);
 
$a = array_values($a);
 
/* producirá un array con estes índices
 
/* producirá un array con estes índices
−
   $a = array(1 => 'uno', 2 => 'tres');
+
   $a = [0 => 'uno', 1 => 'tres'];
 
*/
 
*/
 
?>
 
?>
Línea 314: Línea 297:
 
== Accedendo aos valores gardados no array (2ª forma) ==
 
== Accedendo aos valores gardados no array (2ª forma) ==
  
−
* Podemos facer uso da [http://php.net/manual/es/function.count.php función count] que devolve o número de elementos do array.
+
* Podemos facer uso da [https://www.php.net/manual/es/function.count.php función count()] para obter o número de elementos dun array.
 
: Vexamos un exemplo:
 
: Vexamos un exemplo:
  
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
        $datos = ['casa','can','amigo'];
+
$datos = ['casa', 'can', 'amigo'];
−
        for ($cont=0; $cont<count($datos); $cont++){
+
$total = count($datos);
−
            printf("Dato:%s<br />",$datos[$cont]);
+
 
−
        }
+
for ($cont = 0; $cont < $total; $cont++) {
 +
    printf("Dato: %s<br>", $datos[$cont]);
 +
}
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: Loxicamente esta forma de percorrer o array soamente funcionará cando os valores clave sexan de tipo numérico.
+
: 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 <code>foreach</code>.
  
−
* <u>Nota:</u> 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 [http://wiki.cifprodolfoucha.es/index.php?title=PHP_Constantes_e_variables._%C3%81mbito.#Comprobaci.C3.B3n_de_definici.C3.B3n_e_asignaci.C3.B3n vista anteriormente].
+
* <u>Nota:</u> <code>count([])</code> devolve <code>0</code>. Non se debe chamar a <code>count()</code> sobre unha variable non definida nin sobre un valor que non sexa contable. En PHP 8.x, chamar a <code>count()</code> cun valor non contable provoca un <code>TypeError</code>.
−
: 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 [http://php.net/manual/es/function.is-array.php función is_array].
+
: Se necesitamos comprobar previamente o tipo podemos empregar [https://www.php.net/manual/es/function.is-array.php is_array()] ou comprobar que o valor implementa <code>Countable</code>.
  
 
=== Eliminando elementos do array ===
 
=== Eliminando elementos do array ===
Línea 354: Línea 339:
 
: 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.
  
−
== Accedendo aos valores gardados no array (3ª forma) ==
+
: Nestes caso é mellor traballar con foreach (visto a continuación)
−
 
 
−
* Cando percorremos un array podemos facer uso dun 'punteiro' que vai pasando de posición dun ao seguinte.
 
−
 
 
−
* A [http://php.net/manual/es/function.each.php 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:
 
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
−
<?php
 
−
        $datos = ['casa','can','amigo','coche'];
 
−
        $valor=each($datos);    // Le e pasa ao seguinte
 
−
        printf("<br />Valor con \$valor[1]:%s",$valor[1]);
 
−
        printf("<br />Valor con \$valor['value']:%s",$valor['value']);
 
−
        printf("<br />Clave con \$valor[0]:%s",$valor[0]);
 
−
        printf("<br />Clave con \$valor['key']:%s",$valor['key']);
 
−
       
 
−
        echo "<br />Lendo outro novo dato do array...<br />";
 
−
       
 
−
        $valor=each($datos); // Le e paso ao seguinte
 
−
        printf("<br />Valor con \$valor[1]:%s",$valor[1]);
 
−
        printf("<br />Valor con \$valor['value']:%s",$valor['value']);
 
−
        printf("<br />Clave con \$valor[0]:%s",$valor[0]);
 
−
        printf("<br />Clave con \$valor['key']:%s",$valor['key']);
 
  
−
?>
+
== Accedendo aos valores gardados no array (3ª forma: punteiro interno) ==
−
</syntaxhighlight>
 
  
−
: Dará como resultado:
+
* PHP dispón dun punteiro interno asociado a cada array. Existen varias funcións que permiten consultar ou modificar a súa posición:
−
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
−
Valor con $valor[1]:casa
 
−
Valor con $valor['value']:casa
 
−
Clave con $valor[0]:0
 
−
Clave con $valor['key']:0
 
−
Lendo outro novo dato do array...
 
  
−
Valor con $valor[1]:can
+
:* [https://www.php.net/manual/es/function.reset.php reset()]: sitúa o punteiro no primeiro elemento e devolve o seu valor.
−
Valor con $valor['value']:can
+
:* [https://www.php.net/manual/es/function.current.php current()]: devolve o valor do elemento actual sen mover o punteiro.
−
Clave con $valor[0]:1
+
:* [https://www.php.net/manual/es/function.key.php key()]: devolve a clave do elemento actual; devolve <code>null</code> cando o punteiro está fóra dos límites do array.
−
Clave con $valor['key']:1
+
:* [https://www.php.net/manual/es/function.next.php next()]: avanza o punteiro unha posición e devolve o novo valor.
−
</syntaxhighlight>
+
:* [https://www.php.net/manual/es/function.prev.php prev()]: retrocede o punteiro unha posición e devolve o valor.
  
−
: <u>Nota:</u> Lembrar que se estamos a percorrer o array antes de chegar a este código pode ser necesario 'resetear' o punteiro á posición inicial coa [http://php.net/manual/es/function.reset.php función reset()].
+
: <u>Importante:</u> A antiga función <code>each()</code> foi eliminada en PHP 8.0 e non se pode empregar en PHP 8.5. Para percorrer arrays empregaremos normalmente <code>foreach</code>. As funcións do punteiro interno quedan para casos concretos nos que sexa necesario controlar manualmente a posición.
  
−
* Podemos utilizar unha <u>estrutura de bucle</u> para repetir a operación ata que chegue ao final:
+
* Vexamos un exemplo no que percorremos manualmente un array co seu punteiro interno:
  
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
        $datos = ['casa','can','amigo','coche'];
+
$produtos = [
−
        echo "Dentro dun bucle...<br />";
+
    'produto_a' => 100,
−
        while($valor=each($datos)){
+
    'produto_b' => 150,
−
            printf("<br />Valor con \$valor['value']:%s",$valor['value']);
+
    'produto_c' => 0,
−
            printf("<br />Clave con \$valor['key']:%s",$valor['key']);
+
    'produto_d' => 250,
−
        }
+
];
−
        echo "<br />Acabou o bucle<br />";
 
−
?>
 
−
</syntaxhighlight>
 
−
 
 
−
: Dará como resultado:
 
−
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
−
Dentro dun bucle...
 
−
 
 
−
Valor con $valor['value']:casa
 
−
Clave con $valor['key']:0
 
−
Valor con $valor['value']:can
 
−
Clave con $valor['key']:1
 
−
Valor con $valor['value']:amigo
 
−
Clave con $valor['key']:2
 
−
Valor con $valor['value']:coche
 
−
Clave con $valor['key']:3
 
−
Acabou o bucle
 
−
</syntaxhighlight>
 
−
 
 
−
: <u>Nota:</u> Lembrar que se estamos a percorrer o array antes de chegar a este código pode ser necesario 'resetear' o punteiro á posición inicial coa [http://php.net/manual/es/function.reset.php función reset()].
 
−
 
 
  
−
* Relacionada coa función 'each' temos as seguintes funcións que modifican a posición do punteiro dentro do array:
+
reset($produtos);
  
−
:* [http://php.net/manual/es/function.reset.php función reset()]: Establece o punteiro do array ao primeiro elemento.
+
while (key($produtos) !== null) {
−
:* [http://php.net/manual/es/function.current.php función current()]: Devolve o elemento actual ao que estar a apuntar o punteiro do array pero a diferenza e each non move o punteiro ao seguinte elemento.
+
    $clave = key($produtos);
−
:* [http://php.net/manual/es/function.next.php función next()]: Avanza o punteiro unha posición cara adiante e devolve o elemento.
+
    $prezo = current($produtos);
−
:* [http://php.net/manual/es/function.prev.php función prev()]: Rebobina o punteiro unha posición cara atrás e devolve o elemento.
 
−
:* [https://www.php.net/manual/es/function.key.php key()]: Devolve a clave do array onde está apuntando o punteiro.
 
  
 +
    printf("Produto: %s - Prezo: %s<br>", $clave, $prezo);
  
−
 
+
    next($produtos);
−
: Vexamos uns exemplos con esta forma de percorrer o array:
 
−
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
−
$products = array(
 
−
"product_a" => 100,
 
−
"product_b" => 150,
 
−
"product_c" => 200,
 
−
"product_d" => 250
 
−
);
 
−
 
 
−
// E queres facer un desconto especial para algúns produtos...
 
−
reset($products);
 
−
while ($price = current($products)) {
 
−
$key = key($products);
 
−
$discounted_price = $price;
 
−
 
 
−
// Aplicamos un desconto específico
 
−
if ($key === "product_b" || $key === "product_d") {
 
−
  $discounted_price = $price * 0.80;
 
−
  echo "Produto: " . $key . " - Prezo Orixinal: $" . $price . " - Prezo con Desconto (20%): $" . $discounted_price . "\n";
 
−
} else {
 
−
  // Aplicar un 10% de desconto ao resto de produtos
 
−
  $discounted_price = $price * 0.90;
 
−
  echo "Produto: " . $key . " - Prezo Orixinal: $" . $price . " - Prezo con Desconto (10%): $" . $discounted_price . "\n";
 
−
}
 
−
 
 
−
next($products);
 
 
}
 
}
−
</syntaxhighlight>
 
−
 
−
 
−
 
−
: Agora imos ver un exemplo no que é necesario empregar la función key() para saber si chegamos aos límites do array, xa que se empregamos current non funcionaría correctamente:
 
−
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
−
$array = array(
 
−
"first" => 100,
 
−
"second" => 0, // Con current vai devolver false e indicará final do array
 
−
"third" => false, // Este valor tamén podería confundirse como o final do array
 
−
"fourth" => 200
 
−
);
 
−
 
−
// Neste caso o bucle para en "second".
 
−
reset($array);
 
−
while ($value = current($array)) {
 
−
echo "Clave: " . key($array) . " - Valor: " . $value . "\n";
 
−
next($array);
 
−
}
 
−
 
−
 
−
// Se o facemos con keys non pasará:
 
−
reset($array);
 
−
while (key($array) !== null) {
 
−
$value = current($array);
 
−
echo "Clave: " . key($array) . " - Valor: " . ($value === false ? 'false' : $value) . "\n";
 
−
next($array);
 
−
}
 
−
</syntaxhighlight>
 
−
 
−
 
−
 
−
<br />
 
−
=== Eliminando elementos do array ===
 
−
 
−
* Desta forma podemos eliminar os elementos do array dentro do bucle sen que pase nada.
 
−
 
−
: Por exemplo:
 
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
−
<?php
 
−
        echo "Dentro dun bucle...<br />";
 
−
        while($valor=each($datos)){
 
−
            if ($valor['key']==1){
 
−
                unset($valor['key']);
 
−
            }
 
−
            else {
 
−
                printf("<br />Valor con \$valor['value']:%s",$valor['value']);
 
−
                printf("<br />Clave con \$valor['key']:%s",$valor['key']);
 
−
            }
 
−
        }
 
−
        echo "<br />Acabou o bucle<br />";
 
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: Dará como resultado:
+
: Empregamos <code>key($produtos) !== null</code> para detectar o final. Non é correcto utilizar unha condición como <code>while (current($produtos))</code>, xa que un valor válido como <code>0</code>, <code>false</code> ou unha cadea baleira faría rematar o bucle antes de tempo.
−
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
−
Dentro dun bucle...
 
  
−
Valor con $valor['value']:casa
+
: Na práctica, para este exemplo é máis sinxelo e lexible empregar <code>foreach</code>, que veremos no seguinte apartado.
−
Clave con $valor['key']:0
 
−
Valor con $valor['value']:amigo
 
−
Clave con $valor['key']:2
 
−
Valor con $valor['value']:coche
 
−
Clave con $valor['key']:3
 
−
Acabou o bucle
 
−
</syntaxhighlight>
 
  
−
: Como vemos o elemento con valor de clave 1 foi eliminado dentro do bucle.
 
  
 
== Accedendo aos valores gardados no array (4ª forma - A EMPREGAR) ==
 
== Accedendo aos valores gardados no array (4ª forma - A EMPREGAR) ==
Línea 560: Línea 401:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: Na primeira forma recuperamos o valor de cada elemento do array en cada iteración do bucle for.
+
: Na primeira forma recuperamos o valor de cada elemento do array en cada iteración do bucle <code>foreach</code>.
−
: Na segunda forma recuperamos o valor e a clave de cada elemento do array en cada iteración do bucle for.
+
: Na segunda forma recuperamos a clave e o valor de cada elemento do array en cada iteración do bucle <code>foreach</code>.
  
 
: Vexamos un exemplo:
 
: Vexamos un exemplo:
Línea 609: Línea 450:
  
  
−
* O bucle 'foreach' ten o seu propio punteiro interno e polo tanto non podemos utilizar a [http://php.net/manual/es/function.current.php función 'current'].
+
* O bucle <code>foreach</code> percorre o array independentemente do punteiro interno empregado por funcións como <code>current()</code>, <code>next()</code> ou <code>key()</code>. Ademais, <code>foreach</code> non modifica ese punteiro interno. Por ese motivo, para obter o elemento que se está procesando debemos empregar directamente as variables declaradas no propio <code>foreach</code>.
  
  
Línea 618: Línea 459:
 
<ul>
 
<ul>
 
<?php foreach ($array as $elemento): ?>
 
<?php foreach ($array as $elemento): ?>
−
     <li><?php echo htmlentities($elemento); ?></li>
+
     <li><?php echo htmlspecialchars($elemento, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); ?></li>
 
<?php endforeach; ?>
 
<?php endforeach; ?>
 
</ul>
 
</ul>
Línea 657: Línea 498:
 
O valor é: coche
 
O valor é: coche
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
: '''NOTA:''' Lembrar que xa vimos como [https://wiki.cifprodolfoucha.es/index.php?title=PHP_Arrays#Eliminar_un_elemento_do_Array eliminar un elemento do array directamente].
  
 
== Funcións predefinidas relacionadas cos Arrays ==
 
== Funcións predefinidas relacionadas cos Arrays ==
Línea 666: Línea 509:
 
=== Función in_array ===
 
=== Función in_array ===
  
−
* [https://www.php.net/manual/es/function.in-array.php Función in_array]: Permite saber se un dato dado existe nun array.
+
* [https://www.php.net/manual/es/function.in-array.php Función in_array]: Permite saber se un dato dado existe nun array. É recomendable empregar o terceiro parámetro a <code>true</code> cando queremos evitar conversións automáticas de tipos durante a comparación.
 
: Por exemplo:
 
: Por exemplo:
  
 
::<syntaxhighlight lang="php" line enclose="div" highlight="3" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="3" >
 
<?php
 
<?php
−
function existeEnArray($datoBuscar,$array){
+
function existeEnArray(string $datoBuscar, array $array): string {
−
     if(in_array($datoBuscar,$array)) return "Existe $datoBuscar no array";
+
     if (in_array($datoBuscar, $array, true)) {
−
     else return "Non existe $datoBuscar no array";
+
        return "Existe $datoBuscar no array";
−
   
+
     }
 +
 
 +
    return "Non existe $datoBuscar no array";
 
}
 
}
  
−
$array = array("un", "dous", "tres", "catro");
+
$array = ["un", "dous", "tres", "catro"];
 
echo existeEnArray('tres',$array);
 
echo existeEnArray('tres',$array);
 
echo '<br />';
 
echo '<br />';
Línea 700: Línea 545:
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
$array = array("un", "dous", "tres", "catro");
+
$array = ["un", "dous", "tres", "catro"];
 
foreach (array_keys($array) as $k) {
 
foreach (array_keys($array) as $k) {
 
   echo $k . '-';
 
   echo $k . '-';
Línea 713: Línea 558:
  
 
<br />
 
<br />
−
=== Función list ===
+
=== Desestruturación de arrays: list() e [] ===
−
* [http://php.net/manual/es/function.list.php Función list]: Asigna variables como se foran arrays.
+
* [https://www.php.net/manual/es/function.list.php list()] permite asignar a varias variables os valores dun array dunha forma compacta.
−
: A idea é que partindo dun array poidamos asociar a variables os valores gardados no array dunha forma rápida.
+
: No PHP actual tamén podemos empregar a sintaxe curta <code>[]</code>, que adoita ser máis lexible.
−
 
 
−
* <u>'''Importante''':</u> Só funciona con arrays que teñan claves de tipo numérico.
 
  
 
: Por exemplo:
 
: Por exemplo:
Línea 723: Línea 566:
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
$array = array("un", "dous", "tres", "catro");
+
$array = ["un", "dous", "tres", "catro"];
  
 +
// Forma clásica
 +
list($var1, $var2, $var3, $var4) = $array;
 +
 +
// Sintaxe curta, recomendada no código moderno
 +
[$var1, $var2, $var3, $var4] = $array;
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: Se eu quero gardar cada elemento do array nunha variable tería que facer:
+
* Podemos omitir posicións que non nos interesen:
 +
 
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
          $array = array("un", "dous", "tres", "catro");
+
$array = ["un", "dous", "tres", "catro"];
−
 
+
[, $var2, , $var4] = $array;
−
          $var1=$array[0];
 
−
          $var2=$array[1];
 
−
          $var3=$array[2];
 
−
          $var4=$array[3];
 
−
 
 
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: Pero usando list se pode facer:
+
* A desestruturación tamén pode empregarse con arrays asociativos indicando explicitamente as claves:
  
−
::<syntaxhighlight lang="php" line enclose="div" highlight="3" >
+
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
 
<?php
 
<?php
−
          $array = array("un", "dous", "tres", "catro");
+
$persoa = [
−
          list($var1,$var2,$var3,$var4)=$array;
+
    'nome' => 'Ana',
 +
    'idade' => 25,
 +
];
 +
 
 +
['nome' => $nome, 'idade' => $idade] = $persoa;
 +
 
 +
printf("Nome: %s - Idade: %d", $nome, $idade);
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
: Incluso se poden 'saltar' elementos do array:
+
: <u>Nota PHP 8.5:</u> 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.
−
::<syntaxhighlight lang="php" line enclose="div" highlight="3" >
 
−
<?php
 
−
          $array = array("un", "dous", "tres", "catro");
 
−
          list(,$var2,,$var4)=$array;
 
−
?>
 
−
</syntaxhighlight>
 
  
 
<br />
 
<br />
Línea 835: 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 853: Línea 727:
  
 
<br />
 
<br />
 +
 
== Arrays multidimensionais ==
 
== Arrays multidimensionais ==
  
Línea 873: Línea 748:
 
   array("BMW",1980,'43000 euros'),
 
   array("BMW",1980,'43000 euros'),
 
   array("Opel",1995,'15000 euros'),
 
   array("Opel",1995,'15000 euros'),
−
   array("Peugot",1997,'13200 euros')
+
   array("Peugeot",1997,'13200 euros')
 
   );
 
   );
  
Línea 889: Línea 764:
 
Marca:BMW: ano saída: 1980, prezo: 43000 euros.
 
Marca:BMW: ano saída: 1980, prezo: 43000 euros.
 
Marca:Opel: ano saída: 1995, prezo: 15000 euros.
 
Marca:Opel: ano saída: 1995, prezo: 15000 euros.
−
Marca:Peugot: ano saída: 1997, prezo: 13200 euros.
+
Marca:Peugeot: ano saída: 1997, prezo: 13200 euros.
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 915: Línea 790:
 
Opel -1995 -15000 euros -
 
Opel -1995 -15000 euros -
 
Un novo coche:
 
Un novo coche:
−
Peugot -1997 -13200 euros -
+
Peugeot -1997 -13200 euros -
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 927: Línea 802:
 
   array("Marca" => "BMW","Ano saída" => 1980,"Prezo"=>'43000 euros'),
 
   array("Marca" => "BMW","Ano saída" => 1980,"Prezo"=>'43000 euros'),
 
   array("Marca" => "Opel","Ano saída" => 1995,"Prezo"=>'15000 euros'),
 
   array("Marca" => "Opel","Ano saída" => 1995,"Prezo"=>'15000 euros'),
−
   array("Marca" => "Peugot","Ano saída" => 1997,"Prezo"=>'13200 euros')
+
   array("Marca" => "Peugeot","Ano saída" => 1997,"Prezo"=>'13200 euros')
 
   );
 
   );
  
Línea 949: Línea 824:
 
; Marca : Opel; Ano saída : 1995; Prezo : 15000 euros
 
; Marca : Opel; Ano saída : 1995; Prezo : 15000 euros
 
Un novo coche:
 
Un novo coche:
−
; Marca : Peugot; Ano saída : 1997; Prezo : 13200 euros
+
; Marca : Peugeot; Ano saída : 1997; Prezo : 13200 euros
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 966: Línea 841:
 
               array("BMW",1980,'43000 euros'),
 
               array("BMW",1980,'43000 euros'),
 
               array("Opel",1995,'15000 euros'),
 
               array("Opel",1995,'15000 euros'),
−
               array("Peugot",1997,'13200 euros')
+
               array("Peugeot",1997,'13200 euros')
 
               );
 
               );
 
</syntaxhighlight>
 
</syntaxhighlight>
Línea 979: Línea 854:
 
               array("BMW",1980,'43000 euros'),
 
               array("BMW",1980,'43000 euros'),
 
               array("Opel",1995,'15000 euros'),
 
               array("Opel",1995,'15000 euros'),
−
               array("Peugot",1997,'13200 euros')
+
               array("Peugeot",1997,'13200 euros')
 
               );
 
               );
  
Línea 1028: Línea 903:
 
:: <u>Non vale poñer: unset($value[$key_datos]); </u>
 
:: <u>Non vale poñer: unset($value[$key_datos]); </u>
  
−
* Lembrar que o bucle 'foreach' ten o seu propio punteiro interno e polo tanto non podemos utilizar a función 'current'.
+
* Lembrar que <code>foreach</code> percorre o array independentemente do punteiro interno empregado por <code>current()</code>, <code>next()</code> ou <code>key()</code>; para acceder ao elemento actual debemos empregar as variables do propio <code>foreach</code>.
  
 
<br />
 
<br />
Línea 1040: Línea 915:
 
0---->Opel 1---->1995 2---->15000 euros
 
0---->Opel 1---->1995 2---->15000 euros
 
Coche num.:3
 
Coche num.:3
−
0---->Peugot 1---->1997 2---->13200 euros
+
0---->Peugeot 1---->1997 2---->13200 euros
  
  
Línea 1050: Línea 925:
 
0---->Opel 2---->15000 euros
 
0---->Opel 2---->15000 euros
 
Coche num.:3
 
Coche num.:3
−
0---->Peugot 2---->13200 euros
+
0---->Peugeot 2---->13200 euros
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Línea 1062: Línea 937:
  
 
::<syntaxhighlight lang="php" line enclose="div" highlight="2" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="2" >
−
             $dato_novo = array("Lancia",1998,"10212 euros");
+
             $dato_novo = ["Lancia", 1998, "10212 euros"];
 
             $coches[]=$dato_novo;
 
             $coches[]=$dato_novo;
 
</syntaxhighlight>
 
</syntaxhighlight>
Línea 1068: Línea 943:
  
  
−
* Outra forma é utilizando a [http://php.net/manual/es/function.array-push.php función array_push], pero é máis rápida a forma anterior (non hai que chamar a unha función).
+
* Outra forma é utilizar a [https://www.php.net/manual/es/function.array-push.php función array_push()]. Para engadir un único elemento, a sintaxe <code>$array[] = $valor</code> é máis directa e adoita ser a opción preferida. <code>array_push()</code> resulta útil cando queremos engadir varios elementos nunha soa chamada.
 
::<syntaxhighlight lang="php" line enclose="div" highlight="2" >
 
::<syntaxhighlight lang="php" line enclose="div" highlight="2" >
−
             $dato_novo = array("Lancia",1998,"10212 euros");
+
             $dato_novo = ["Lancia", 1998, "10212 euros"];
 
             array_push($coches, $dato_novo);
 
             array_push($coches, $dato_novo);
 
</syntaxhighlight>
 
</syntaxhighlight>
Línea 1083: Línea 958:
 
0---->Opel 2---->15000 euros
 
0---->Opel 2---->15000 euros
 
Coche num.:3
 
Coche num.:3
−
0---->Peugot 2---->13200 euros
+
0---->Peugeot 2---->13200 euros
 
Coche num.:4
 
Coche num.:4
 
0---->Lancia 1---->1998 2---->10212 euros
 
0---->Lancia 1---->1998 2---->10212 euros
Línea 1103: Línea 978:
 
== Accedendo a elementos dun array devoltos dende funcións ==
 
== Accedendo a elementos dun array devoltos dende funcións ==
  
−
* Anteriormente á versión 5.4, se queremos acceder a un elemento dun array devolve por unha función tiñamos que facer isto:
+
* Podemos acceder directamente a un elemento dun array devolto por unha función empregando os corchetes sobre o resultado da chamada.
−
 
 
−
::<syntaxhighlight lang="php" line enclose="div" highlight="6,7" >
 
−
<?php
 
−
function getArray() {
 
−
    return array(1, 2, 3);
 
−
}
 
−
 
 
−
$tmp = getArray();
 
−
$segundoElemento = $tmp[1];
 
−
?>
 
−
</syntaxhighlight>
 
  
−
 
+
::<syntaxhighlight lang="php" line enclose="div" highlight="6" >
−
: A partires da versión 5.4 xa podemos facer isto:
 
−
::<syntaxhighlight lang="php" line enclose="div" highlight="7" >
 
 
<?php
 
<?php
−
function getArray() {
+
function getArray(): array {
−
     return array(1, 2, 3);
+
     return [1, 2, 3];
 
}
 
}
  
−
// a partires de PHP 5.4
 
 
$segundoElemento = getArray()[1];
 
$segundoElemento = getArray()[1];
  
 +
echo $segundoElemento; // 2
 
?>
 
?>
 
</syntaxhighlight>
 
</syntaxhighlight>
  
−
 
+
: Esta sintaxe é plenamente válida en PHP 8.5 e evita crear unha variable temporal cando só necesitamos acceder a un elemento concreto.
−
 
 
  
  
Línea 1181: Línea 1042:
 
* '''Solución Exercicio 1:''' Crea unha función que amose a media dunha serie de números gardados nun array fora da función.
 
* '''Solución Exercicio 1:''' Crea unha función que amose a media dunha serie de números gardados nun array fora da función.
 
: <u>Nota:</u> Busca array_sum
 
: <u>Nota:</u> Busca array_sum
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
+
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Línea 1190: Línea 1051:
 
     <h1>Calcular o promedio dun array de números</h1>
 
     <h1>Calcular o promedio dun array de números</h1>
 
     <?php
 
     <?php
−
        // Definir unha función que calcula o promedio dun array de números
+
        /**
−
         function calcularPromedio($numeros) {
+
        * 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
 
             $total = count($numeros); // Calcular o número total de elementos no array
 
             $suma = array_sum($numeros); // Calcular a suma dos números no array
 
             $suma = array_sum($numeros); // Calcular a suma dos números no array
 +
 
             if ($total > 0) {
 
             if ($total > 0) {
 
                 $promedio = $suma / $total; // Calcular o promedio
 
                 $promedio = $suma / $total; // Calcular o promedio
Línea 1224: Línea 1097:
 
* '''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.
 
* '''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.
 
: A función terá que comprobar se o array ten datos. En caso contrario amosará un erro.
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
+
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Línea 1252: Línea 1125:
 
         ];
 
         ];
  
−
        // Definir unha función para amosar a información de usuarios
+
        /**
−
         function amosarUsuarios($usuarios) {
+
        * 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)) {
 
             if (empty($usuarios)) {
 
                 echo "O array de usuarios está baleiro.";
 
                 echo "O array de usuarios está baleiro.";
Línea 1281: Línea 1170:
 
<br />
 
<br />
 
* '''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.
 
* '''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.
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
+
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Línea 1333: Línea 1222:
 
<br />
 
<br />
 
* '''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.
 
* '''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.
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
+
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Línea 1355: Línea 1244:
  
 
         // Comprobar se o valor está no array
 
         // Comprobar se o valor está no array
−
         if (in_array($valorABuscar, $cores)) {
+
         if (in_array($valorABuscar, $cores, true)) {
 
             echo "O valor '$valorABuscar' está no array de cores.";
 
             echo "O valor '$valorABuscar' está no array de cores.";
 
         } else {
 
         } else {
Línea 1374: Línea 1263:
 
* '''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.
 
* '''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.
 
:<u>Pista:</u> Consulta array_unique.
 
:<u>Pista:</u> Consulta array_unique.
−
::<syntaxhighlight lang="php" line enclose="div" highlight="" >
+
::<syntaxhighlight lang="php" enclose="div" highlight="" >
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Línea 1383: Línea 1272:
 
     <h1>Eliminar 'a' e devolver palabras únicas</h1>
 
     <h1>Eliminar 'a' e devolver palabras únicas</h1>
 
     <?php
 
     <?php
−
        // Definir unha función que elimina 'a' e devolve palabras únicas
+
        /**
−
         function eliminarLetraA($cadea) {
+
        * 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
 
             // Eliminar todas as letras 'a' da cadea
 
             $cadeaSenA = str_replace('a', '', $cadea);
 
             $cadeaSenA = str_replace('a', '', $cadea);
  
−
             // Dividir a cadea sen 'a' en palabras usando coma coma separador
+
             // Dividir a cadea sen 'a' en palabras usando coma como separador
 
             $palabras = explode(',', $cadeaSenA);
 
             $palabras = explode(',', $cadeaSenA);
  
Línea 1397: Línea 1298:
 
             return $palabrasUnicas;
 
             return $palabrasUnicas;
 
         }
 
         }
 +
  
 
         // Cadea de entrada
 
         // Cadea de entrada
Línea 1416: Línea 1318:
  
  
−
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2016).
+
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2025).

Revisión actual del 11:01 8 oct 2026

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