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