Diferencia entre revisiones de «Usuario:ManuelRomero/php/dwes/B2T1/arrays/concepto»
De WikiEducator
< Usuario:ManuelRomero | php
(19 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 21: | Línea 21: | ||
<!--{{:Usuario:ManuelRomero/php/arrays/nav}}--> | <!--{{:Usuario:ManuelRomero/php/arrays/nav}}--> | ||
<div class="slides layout-regular template-default"> | <div class="slides layout-regular template-default"> | ||
− | + | ||
<div class="parrafo"> | <div class="parrafo"> | ||
+ | <div class="slide"> | ||
===Arrays=== | ===Arrays=== | ||
− | *Un tipo de datos compuesto es aquel que | + | *Un tipo de datos compuesto es aquel que está formado por varios valores que se pueden tratar de manera independiente, pero a la vez se maneja de forma única. |
− | *En PHP puedes utilizar dos tipos de datos compuestos: el array y el objeto. | + | *En PHP puedes utilizar dos tipos de datos compuestos: '''''el array''''' y '''''el objeto'''''. |
− | *Los objetos los veremos más adelante. | + | *Los objetos los veremos más adelante. Además de los '''''objetos''''', y muy relacionados están los '''''recursos''''', que también veremos más adelante. |
</div> | </div> | ||
<!--1--> | <!--1--> | ||
<div class="slide"> | <div class="slide"> | ||
− | {{MRM_Definicion|Un array es un tipo de datos que nos permite almacenar varios valores. }} | + | {{MRM_Definicion|Un array es un tipo de datos compuesto que nos permite almacenar varios valores en una única variable. }} |
− | *Cada miembro del array se almacena en una posición a la que se hace referencia utilizando un valor clave. | + | *Cada miembro del array se almacena en una posición a la que se hace referencia utilizando un '''valor clave o índice'''. |
[[Archivo:arrayPHP.png]] | [[Archivo:arrayPHP.png]] | ||
Línea 39: | Línea 40: | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
− | *Dependiendo del valor de la posición podemos clasificar los arrays de dos tipos | + | *Dependiendo del valor de la posición podemos clasificar los arrays de dos tipos: |
#'''''Indexado'''''. Cada valor es un entero que indica su posición, empezando por cero. | #'''''Indexado'''''. Cada valor es un entero que indica su posición, empezando por cero. | ||
− | #'''''Asociativo'''''. El valor de cada posición tiene un significado diferente a la posición que ocupa y puede ser de cualquier tipo | + | #'''''Asociativo'''''. El valor de cada posición tiene un significado diferente a la posición que ocupa y puede ser de cualquier tipo. |
<source lang=php> | <source lang=php> | ||
// array numérico | // array numérico | ||
Línea 47: | Línea 48: | ||
1 => "Bases de datos", ..., | 1 => "Bases de datos", ..., | ||
9 => "Desarrollo web en entorno servidor"); | 9 => "Desarrollo web en entorno servidor"); | ||
+ | |||
// array asociativo | // array asociativo | ||
$modulos2 = array("PR" => "Programación", | $modulos2 = array("PR" => "Programación", | ||
Línea 53: | Línea 55: | ||
</source> | </source> | ||
</div> | </div> | ||
− | + | <source lang=php> | |
+ | $modulos1 = [0 => "Programación", | ||
+ | 1 => "Bases de datos", ..., | ||
+ | 9 => "Desarrollo web en entorno servidor"]; | ||
+ | // array asociativo | ||
+ | $modulos2 = ["PR" => "Programación", | ||
+ | "BD" => "Bases de datos", ..., | ||
+ | "DWES" => "Desarrollo web en entorno servidor"]; | ||
+ | </source> | ||
<!--1--> | <!--1--> | ||
<div class="slide"> | <div class="slide"> | ||
;Arrays asociativos Vs indexados | ;Arrays asociativos Vs indexados | ||
[[Archivo:array2PHP.png|center]] | [[Archivo:array2PHP.png|center]] | ||
+ | Podemos pasar de array indexado a asociativo creando un nuevo índice en cualquier momento. | ||
+ | En realidad los arrays indexados son un caso especial de array asociativo, en dónde el valor de la clave la genera de forma automátia el sistema. En breve expondremos esta idea que vemos en el ejemplo | ||
+ | {{MRM_Actividad|Title = Ejemplo de asignación| | ||
+ | *Aunque estos conceptos los analizaremos mas tarde mira el siguiente código | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | //Creo e inicializo un array llamado modulos | ||
+ | $modulos = array("PR" => "Programación", | ||
+ | "BD" => "Bases de datos", | ||
+ | "DWES" => "Desarrollo web en entorno servidor"); | ||
+ | |||
+ | //Agrego un nuevo elemento sin especificar posición | ||
+ | $modulos[] = "otro módulo"; | ||
+ | |||
+ | //Ahora añado un módulo en el índice con valor 10 que NO ES LA POSICIÓN 10 | ||
+ | $modulos[10] = "Módulo indexado con el índice 10"; | ||
+ | |||
+ | |||
+ | //incorporamos un nuevo elmento en el array sin especificar el valor del índice | ||
+ | //PHP asignará un valor siguiente el último valor numérico que fue el 10 (indice último numérico agragado) | ||
+ | $modulos[] = "Último módulo añadido"; | ||
+ | |||
+ | //Visuzlizo con var_dump el contenido y estructura de la variable $modulo | ||
+ | var_dump($modulos); | ||
+ | </source> | ||
+ | |||
+ | *La salida que genera ver el contenido de la variable $modulos es un array de 6 elementos | ||
+ | *Y vemos el valor de los índices y los contenidos de cada elemento: | ||
+ | <source lang=php> | ||
+ | |||
+ | array (size=6) | ||
+ | 'PR' => string 'Programación' (length=13) | ||
+ | 'BD' => string 'Bases de datos' (length=14) | ||
+ | 'DWES' => string 'Desarrollo web en entorno servidor' (length=34) | ||
+ | 0 => string 'otro módulo' (length=12) | ||
+ | 10 => string 'Módulo indexado con el índice 10' (length=34) | ||
+ | 11 => string 'Último módulo añadido' (length=24) | ||
+ | </source> | ||
+ | }} | ||
</div> | </div> | ||
Línea 64: | Línea 113: | ||
===Array numéricos o indexados=== | ===Array numéricos o indexados=== | ||
− | *Clasificación en función de la clave que llevan | + | *Clasificación en función de la clave que llevan: |
− | #Clave numérica posicional : La clave especifica la posición de cada elemento | + | #Clave numérica posicional : La clave especifica la posición de cada elemento. |
− | #Clave con valor: La clave tiene un significado por sí mismo y tiene '''asociado''' un valor | + | #Clave con valor: La clave tiene un significado por sí mismo y tiene '''asociado''' un valor. |
− | ;Arrays indexados | + | ;Arrays indexados: |
− | :En los arrays numéricos empezamos por 0 | + | :En los arrays numéricos empezamos por 0. |
− | + | *El contenido de un elemento de un array puede ser cualquier valor, incluido otro array, puediendo fácilmente construir estructuras mas complejas o arrays N-dimensionales, como veremos en ejemplos posteriores | |
+ | |||
+ | |||
</div> | </div> | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
===Trabajar con un array=== | ===Trabajar con un array=== | ||
− | *A la hora de trabajar con arrays, hay que saber operar con ellos | + | *A la hora de trabajar con arrays, hay que saber operar con ellos: |
− | #Crear o definir un array | + | #'''''Crear''''' o definir un array. |
− | #Asignar, agregar valores al array | + | #'''''Asignar''''', agregar valores al array. |
− | #Leer elementos del array | + | #'''''Leer''''' elementos del array. |
− | #Borrar elementos del array | + | #'''''Borrar''''' elementos del array. |
</div> | </div> | ||
Línea 87: | Línea 139: | ||
*Podemos usar el operador '''''array();''''' | *Podemos usar el operador '''''array();''''' | ||
*A partir de la versión 5.3 se puede directamente usar el operador '''''[]''''' | *A partir de la versión 5.3 se puede directamente usar el operador '''''[]''''' | ||
− | + | *En php no hay que especificar ni índice ni lógicamente tipo. | |
− | *En php no hay que especificar ni índice ni lógicamente tipo | + | El '''''array''''', como hemos comentado, va a ser un conjunto de elementos, cada tipo de cada elemento dependerá del valor que contenga en cada momento , y por supuesto puede ser modificado (tanto el valor como el tipo). |
− | El array como hemos comentado va a ser un conjunto de elementos, cada tipo de cada elemento dependerá del valor que contenga en cada momento , y por supuesto puede ser modificado (tanto el valor como el tipo). | + | |
</div> | </div> | ||
Línea 97: | Línea 148: | ||
<source lang=php> | <source lang=php> | ||
/* | /* | ||
− | Creamos una variable array llamada miArray vacía | + | Creamos una variable '''array''' llamada ''miArray'' vacía. |
− | Dos formas equivalentes | + | Dos formas equivalentes: |
*/ | */ | ||
$miArray = array(); | $miArray = array(); | ||
Línea 107: | Línea 158: | ||
$miArray = array("Burgos","Zaragoza","Huesca", "Teruel","Soria"); | $miArray = array("Burgos","Zaragoza","Huesca", "Teruel","Soria"); | ||
$miArray = ["Burgos","Zaragoza","Huesca", "Teruel","Soria"]; | $miArray = ["Burgos","Zaragoza","Huesca", "Teruel","Soria"]; | ||
− | |||
</source> | </source> | ||
</div> | </div> | ||
Línea 115: | Línea 165: | ||
====Escribir en un array==== | ====Escribir en un array==== | ||
*Simplemente hay que asignar un valor a una posición del '''''array''''' | *Simplemente hay que asignar un valor a una posición del '''''array''''' | ||
− | * | + | *Si no especificamos valor al índice, PHP asignará un valor numérico superior al valor numérico más alto asignado |
*Si pongo un valor superior al número de índices, el siguiente elemento estará en una posición mas | *Si pongo un valor superior al número de índices, el siguiente elemento estará en una posición mas | ||
<source lang=php> | <source lang=php> | ||
Línea 130: | Línea 180: | ||
<div class="slide"> | <div class="slide"> | ||
;Escribir en un array | ;Escribir en un array | ||
− | *Podemos ver gráficamente como queda el '''array''' | + | *Podemos ver gráficamente como queda el '''array'''. |
[[Archivo:arrayNotas.png]] | [[Archivo:arrayNotas.png]] | ||
− | * | + | *Las posiciones no especificadas no existen. |
− | + | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
[[Archivo:arrayNotas2.png]] | [[Archivo:arrayNotas2.png]] | ||
− | *Vemos como la posición 2,3 y 4 no van a existir con valores en el array | + | *Vemos como la posición 2,3 y 4 no van a existir con valores en el array. |
− | *Las puedo usar explícitamente | + | *Las puedo usar explícitamente. |
<source lang=php> | <source lang=php> | ||
$notas[2]= 8; | $notas[2]= 8; | ||
+ | |||
+ | </div> | ||
+ | ;Escribir en un array | ||
+ | Podemos ver cómo quedaría el array si realizamos las siguientes modificaciones: | ||
+ | <source lang=php> | ||
+ | $notas =[]; | ||
+ | $notas[]=10; | ||
+ | $notas[20]=7; | ||
+ | $notas[5]= 8; | ||
+ | $notas [1] =9; | ||
+ | $notas [2] =6; | ||
+ | $notas [] =10; | ||
+ | |||
+ | var_dump($notas) | ||
+ | </source> | ||
+ | *Nos monstrará la siguiente información, donde vemos que la última posición añadida en el índice el sistema generó el valor 21. | ||
+ | *También podemos observar que el valor del índice no tiene nada que ver con la posición ordenada del elemento dentro de la variable (Tiene 6 posiciones, desde la 0 hasta la 5). | ||
+ | <source lang=php> | ||
+ | array (size=6) | ||
+ | 0 => int 10 | ||
+ | 20 => int 7 | ||
+ | 5 => int 8 | ||
+ | 1 => int 9 | ||
+ | 2 => int 6 | ||
+ | 21 => int 10 | ||
+ | </source> | ||
+ | |||
+ | </div> | ||
+ | |||
</source> | </source> | ||
</div> | </div> | ||
Línea 147: | Línea 225: | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
+ | *Un array se puede inicializar de los siguientes modos: | ||
+ | |||
+ | <source lang=php> | ||
+ | $capitales = array("España"=>"Madrid", | ||
+ | "Italia"=>"Roma", | ||
+ | "Alemania"=>"Berlín"); | ||
+ | $capital ["España"=>"Madrid", | ||
+ | "Italia"=>"Roma", | ||
+ | "Alemania"=>"Berlín"]; | ||
+ | </source> | ||
+ | *También se puede crear directamente con [] | ||
+ | <source lang=php> | ||
+ | $capitales["España"]="Madrid"; | ||
+ | $capitales["Italia"]="Roma" | ||
+ | $capitales["Alemania"]="Berlín"; | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
===Leer un array=== | ===Leer un array=== | ||
− | *Hemos de diferenciar entre dos conceptos | + | *Hemos de diferenciar entre dos conceptos: |
+ | **Leer un elemento de un '''array''' | ||
+ | **Recorrer un array | ||
;Leer un elemento de un '''array''' | ;Leer un elemento de un '''array''' | ||
Simplemente accedemos a su posición por el índice | Simplemente accedemos a su posición por el índice | ||
<source lang=php> | <source lang=php> | ||
+ | for ($n=0; $n<8; $n++) | ||
+ | $notas[]= rand(1,10); | ||
+ | |||
echo "la nota primera es $notas[0]"; | echo "la nota primera es $notas[0]"; | ||
− | echo "la nota | + | echo "la nota de la posición 7 es $nota[7]"; |
+ | echo "El valor de la variable $notas es -$nota- | ||
</source> | </source> | ||
− | + | *El código anterior saldría, | |
+ | <source lang=php> | ||
+ | la nota primera es 6 | ||
+ | la nota de la posición 7 es 8 | ||
+ | El valor de la variable $notas es -Array- | ||
+ | </source> | ||
+ | Vemos como al escribir el nombre del array no veríamos su contenido si no el tipo del valor. | ||
</div> | </div> | ||
Línea 161: | Línea 269: | ||
<div class="slide"> | <div class="slide"> | ||
;Recorrer un array | ;Recorrer un array | ||
− | * | + | *Recorrer un array es pasar por todos sus valores, desde la primera posición hasta la última. |
− | + | *En otros lenguajes la forma normal de hacer esto es obtener el número de elementos y visitarlo con un bucle for. | |
− | + | *En php tenemos la función '''''count()''''' o '''''sizeof()''''' que nos devuelve en número de elementos del array | |
− | + | *Vemos en el ejemplo cómo hacerlo | |
+ | <source lang=php> | ||
+ | <?php | ||
+ | |||
+ | //Inicializo un array de tamaño entre 20 y 30 elementos | ||
+ | $tamano = rand(10,15); | ||
+ | for ($n = 0; $n<$tamano ; $n++){ | ||
+ | $notas[]=rand(0,10); | ||
+ | } | ||
+ | //Ahora para recorrerlo obtengo el tamaño del array | ||
+ | $elementos = sizeof($notas); | ||
+ | |||
+ | echo "<h2>Vamos a recorrer un array de $elementos elementos</h2>"; | ||
+ | //Reocorro cada elemento | ||
+ | for ($n=0; $n<$elementos; $n++){ | ||
+ | echo "Valor de la posición $n <b>$notas[$n]</b><br />"; | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | <source lang="php"> | ||
+ | Vamos a recorrer un array de 12 elementos | ||
+ | |||
+ | Valor de la posición 0 8 | ||
+ | Valor de la posición 1 6 | ||
+ | Valor de la posición 2 6 | ||
+ | Valor de la posición 3 10 | ||
+ | Valor de la posición 4 9 | ||
+ | Valor de la posición 5 3 | ||
+ | Valor de la posición 6 6 | ||
+ | Valor de la posición 7 7 | ||
+ | Valor de la posición 8 2 | ||
+ | Valor de la posición 9 6 | ||
+ | Valor de la posición 10 4 | ||
+ | Valor de la posición 11 10 | ||
+ | </source> | ||
+ | |||
<source lang=php> | <source lang=php> | ||
$ciudades = ["Burgos","Zaragoza","Huesca", "Teruel","Soria"]; | $ciudades = ["Burgos","Zaragoza","Huesca", "Teruel","Soria"]; | ||
Línea 172: | Línea 315: | ||
</source> | </source> | ||
</div> | </div> | ||
− | |||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
Línea 184: | Línea 326: | ||
//Creo la variable array de notas | //Creo la variable array de notas | ||
$notas=[]; | $notas=[]; | ||
− | |||
− | |||
//Relleno el array con 10 notas | //Relleno el array con 10 notas | ||
//$notas = array_fill(0, 10,rand(1,10)); | //$notas = array_fill(0, 10,rand(1,10)); | ||
for ($a=0;$a<10;$a++) | for ($a=0;$a<10;$a++) | ||
$notas[$a]=rand(1,10); | $notas[$a]=rand(1,10); | ||
− | |||
− | |||
$min = $notas[0]; | $min = $notas[0]; | ||
$max = $notas[0]; | $max = $notas[0]; | ||
Línea 200: | Línea 338: | ||
$max = $notas[$a]>$max ? $notas[$a] : $max; | $max = $notas[$a]>$max ? $notas[$a] : $max; | ||
} | } | ||
− | |||
− | |||
echo "Valor de la nota media ".($total/10)."<br />"; | echo "Valor de la nota media ".($total/10)."<br />"; | ||
echo "Valor mínimo".$min."<br />"; | echo "Valor mínimo".$min."<br />"; | ||
Línea 213: | Línea 349: | ||
<div class="slide"> | <div class="slide"> | ||
;Recorrer un array | ;Recorrer un array | ||
− | |||
{{MRM_Pregunta|¿Por qué no conviene usar la función '''''count'''''}} | {{MRM_Pregunta|¿Por qué no conviene usar la función '''''count'''''}} | ||
+ | *Esta no es una forma conveniente de recorrer un array en php, pues no tiene porqué coincidir en el índice de cada elemento con su posición numérica. | ||
+ | *Supongamos el siguiente caso | ||
<source lang=php> | <source lang=php> | ||
− | $capitales = array(); | + | $capitales = array();//Creo un array vacío. No hace falta hacerlo antes de dar valores |
− | $ | + | $capitales= ["España"=>"Madrid", "Italia"=>"Roma","Alemania"=>"Berlín"]; |
</source> | </source> | ||
</div> | </div> | ||
+ | |||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
;Recorrer un array | ;Recorrer un array | ||
− | * | + | *La forma de recorrer un array en php es con la estructura de control '''''foreach''''' |
<source lang=php> | <source lang=php> | ||
− | $ | + | foreach ($array as $valor){ |
− | + | .... | |
− | + | } | |
− | $ | + | </source> |
− | + | *La forma de leerla sería | |
− | + | ;Para cada elemento de $array, cuyo valor guardo en $valor | |
− | * | + | ;Esto lo hago hasta que llegue al último elemento |
+ | *O bien: | ||
<source lang=php> | <source lang=php> | ||
− | $ | + | foreach ($array as $indice => $valor){ |
− | $ | + | .... |
− | + | } | |
</source> | </source> | ||
− | + | *Cuya lectura sería | |
+ | ;Para cada elemento de $array, cuyo valor índice (valor del índice guardo en $indice y cuyo valor almaceno en $valor | ||
+ | ;Esto lo hago hasta que llegue al último elemento | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
− | * | + | *Veamos un ejemplo y la salida que produce |
− | + | <source lang=php> | |
− | + | <?php | |
− | + | ||
− | + | ||
− | + | ||
− | < | + | |
− | < | + | $capitales =["España"=>"Madrid", "Italia"=>"Roma","Alemania"=>"Berlín"]; |
− | < | + | |
+ | $n=0; //Para llevar un control del número de elementos | ||
+ | |||
+ | //Accediendo solo a los contendios | ||
+ | echo "<h2>Vamos a ver las capitales del array </h2>"; | ||
+ | //$capital es el nombre de una variable que ponemos de forma libre (podemos elegir el nombre que queramos) | ||
+ | foreach ($capitales as $capital){ | ||
+ | echo "La capital de la posición <b>$n</b> es <b>$capital</b><br />"; | ||
+ | $n++; | ||
+ | } | ||
+ | |||
+ | //Si quiero ver también los índices | ||
+ | echo "<h2>Vamos a ver los paises con sus capitales del array </h2>"; | ||
+ | //Tanto $pais como $capital son nombres de variables que ponemos de forma libre (podemos elegir los nombres que queramos) | ||
+ | $n=0; | ||
+ | foreach ($capitales as $pais =>$capital){ | ||
+ | echo "La capital de la posición <b>$n</b> del país <b>$pais </b> es <b>$capital</b><br />"; | ||
+ | $n++; | ||
+ | } | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | *La salida generada será | ||
<source lang=php> | <source lang=php> | ||
+ | Vamos a ver las capitales del array | ||
+ | |||
+ | La capital de la posición 0 es Madrid | ||
+ | La capital de la posición 1 es Roma | ||
+ | La capital de la posición 2 es Berlín | ||
+ | Vamos a ver los paises con sus capitales del array | ||
+ | |||
+ | La capital de la posición 0 del país España es Madrid | ||
+ | La capital de la posición 1 del país Italia es Roma | ||
+ | La capital de la posición 2 del país Alemania es Berlín | ||
+ | </source> | ||
+ | |||
+ | ===Modificar un array recorrido=== | ||
+ | *Supongamos que queremos modificar el contenido de un array que estamos recorriendo. | ||
+ | *Por ejemplo supongamos que tenemos la siguiente estructura de datos | ||
+ | Un array de productos de cada uno de los cuales vamos a tener nombre y precio | ||
+ | <source lang=PHP> | ||
<?php | <?php | ||
− | + | $productos = [ | |
− | $ | + | 'lechugas'=> ['precio' => 100, 'unidades'=>50], |
− | + | 'manzanas'=> [ 'precio' => 200, 'unidades'=>100], | |
− | + | 'peras'=> [ 'precio' => 300, 'unidades'=>150], | |
− | + | 'tomates'=> [ 'precio' => 400, 'unidades'=>200], | |
− | + | 'cebollas'=> ['precio' => 500, 'unidades'=>25], | |
+ | ]; | ||
− | // | + | echo "<h2>Visualizamos los productos</h2>"; |
− | $ | + | |
− | + | //Para cada producto | |
− | + | foreach ($productos as $producto=>$datos){ | |
− | echo " | + | $precio = $datos['precio']; |
+ | $unidades = $datos['unidades']; | ||
+ | echo "<h3>producto $producto precio $precio unidades $unidades</h3>"; | ||
} | } | ||
?> | ?> | ||
</source> | </source> | ||
+ | *Si quisiéramos modificar el precio un 10% e incrementar 100 cada producto podríamos pensar en hacer en el bucle, pero vemos que el precio no se modificaría | ||
+ | <source lang=php> | ||
+ | |||
+ | echo "<h2>Modificamos el precio (10%) y las unidades en 100 unidades</h2>"; | ||
+ | //Para cada producto | ||
+ | foreach ($productos as $producto=>$datos){ | ||
+ | $datos['precio'] *=1.10; | ||
+ | $datos['unidades'] +=100; | ||
+ | } | ||
+ | echo "<hr />"; | ||
+ | |||
+ | //Vovemos a visualizar y vemos que no ha cambiado | ||
+ | //Para cada producto | ||
+ | |||
+ | echo "<h2>Visualizamos los productos previamente modificados</h2>"; | ||
+ | foreach ($productos as $producto=>$datos){ | ||
+ | $precio = $datos['precio']; | ||
+ | $unidades = $datos['unidades']; | ||
+ | echo "<h3>producto $producto precio $precio unidades $unidades</h3>"; | ||
+ | } | ||
+ | </source> | ||
+ | *Esto es por que en realidad en cada interación se está cogiendo el valor del elemento del array '''''$productos''''' y se copia en la variable '''''$prodcuto''''' el índice y '''''$datos''''' el valor, pero $datos es otra posición de memoria diferente que el contenido correspondiente del array, por lo que al modificarlo el array se queda inalterado. | ||
+ | Si queremos modificarlo, tendríamos que hacer que el valor de '''''$datos''''' estuviera en la misma posoción de memoria que la posición correspondiente del array, y esto se consigue con el operador '''''&''''', por lo que el bucle sería | ||
+ | <source lang=php> | ||
+ | foreach ($productos as $producto=>&$datos){ | ||
+ | </source> | ||
+ | en lugar de | ||
+ | <source lang=php> | ||
+ | foreach ($productos as $producto=>$datos){ | ||
+ | </source> | ||
+ | El código completo que sí que modifica el array sería | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $productos = [ | ||
+ | 'lechugas'=> ['precio' => 100, 'unidades'=>50], | ||
+ | 'manzanas'=> [ 'precio' => 200, 'unidades'=>100], | ||
+ | 'peras'=> [ 'precio' => 300, 'unidades'=>150], | ||
+ | 'tomates'=> [ 'precio' => 400, 'unidades'=>200], | ||
+ | 'cebollas'=> ['precio' => 500, 'unidades'=>25], | ||
+ | ]; | ||
+ | |||
+ | echo "<h2>Visualizamos los productos</h2>"; | ||
+ | |||
+ | //Para cada producto | ||
+ | foreach ($productos as $producto=>$datos){ | ||
+ | $precio = $datos['precio']; | ||
+ | $unidades = $datos['unidades']; | ||
+ | echo "<h3>producto $producto precio $precio unidades $unidades</h3>"; | ||
+ | } | ||
+ | //Ahora modificamos el precio un 10% y e incrementamos 100 unidades cada producto | ||
+ | |||
+ | echo "<h2>Modificamos el precio (10%) y las unidades en 100 unidades</h2>"; | ||
+ | //Para cada producto | ||
+ | foreach ($productos as $producto=>$datos){ | ||
+ | $datos['precio'] *=1.10; | ||
+ | $datos['unidades'] +=100; | ||
+ | } | ||
+ | echo "<hr />"; | ||
+ | |||
+ | //Vovemos a visualizar y vemos que ho ha cambiado | ||
+ | //Para cada producto | ||
+ | |||
+ | echo "<h2>Visualizamos los productos previamente modificados</h2>"; | ||
+ | foreach ($productos as $producto=>$datos){ | ||
+ | $precio = $datos['precio']; | ||
+ | $unidades = $datos['unidades']; | ||
+ | echo "<h3>producto $producto precio $precio unidades $unidades</h3>"; | ||
+ | } | ||
+ | </source> | ||
+ | |||
</div> | </div> | ||
+ | *También podemos usar funciones de tipo cursor para recorrer el array. | ||
+ | *Estas funciones me permiten moverme entre los elementos y extraer el valor o índice de cada uno de ellos | ||
+ | *Puedo ir al primero, último, anterior o siguiente | ||
+ | *Para ello tendríamos las siguintes funciones | ||
+ | <source lang=bash> | ||
+ | current() - Devuelve el elemento actual en un array | ||
+ | end() - Establece el puntero interno de un array a su último elemento | ||
+ | prev() - Rebobina el puntero interno del array | ||
+ | reset() - Establece el puntero interno de un array a su primer elemento | ||
+ | each() - Devolver el par clave/valor actual de un array y avanzar el cursor del array | ||
+ | key() - Obtiene una clave de un array | ||
+ | list() - Asignar variables como si fueran un array | ||
+ | next() - Avanza el puntero interno de un array | ||
+ | </source> | ||
+ | *Vemos el ejemplo anterior | ||
+ | <source lang=php> | ||
+ | <?php | ||
− | + | $capitales = ["España" => "Madrid", "Italia" => "Roma", "Alemania" => "Berlín"]; | |
− | + | ||
+ | |||
+ | //Accediendo solo a los contendios | ||
+ | echo "<h2>Vamos a ver las capitales del array recorriéndolo como un cursor</h2>"; | ||
+ | |||
+ | reset($capitales);//Voy al primer elemento | ||
+ | $n = 0; | ||
+ | do { | ||
+ | $pais = key($capitales); //Obtener el indice actual | ||
+ | $capital = current($capitales); //Obtener el valor del elemento actual del array | ||
+ | echo "La capital de la posición <b>$n</b> del país <b> $pais </b > es <b > $capital</b ><br />"; | ||
+ | $n++; | ||
+ | }while (next($capitales)); //Next avanza al siguiente elemento del array, cuando llegue al último dará false | ||
+ | |||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | *Y la salida que genera | ||
+ | |||
+ | <source lang=bash> | ||
+ | Vamos a ver las capitales del array recorriéndolo como un cursor | ||
+ | |||
+ | La capital de la posición 0 del país España es Madrid | ||
+ | La capital de la posición 1 del país Italia es Roma | ||
+ | La capital de la posición 2 del país Alemania es Berlín | ||
+ | |||
+ | </source> | ||
===Ver el contenido de un array=== | ===Ver el contenido de un array=== | ||
− | *Podemos usar la función ya conocida '''''var_dump()''''' | + | *Podemos ver el contenido de un array de forma completa, usando las funciones de '''''var_dump()''''' y '''''print_r()'''''. |
− | *También podemos usar la | + | *Podemos usar la función ya conocida '''''var_dump()'''''. |
+ | *También podemos usar la función '''''print_r'''''. | ||
+ | *La función print_r tiene un segundo parámetro booleano que por defecto es false, que sirve para hacer que la salida en lugar de sacarla por el estándar de salida la devuelva como un string. | ||
+ | <source lang=php> | ||
+ | $miArray = [ "Burgos", "Zaragoza", "Huesca", "Teruel", "Soria" ]; | ||
+ | echo "<h3>Mostrando información con var_dump de un array</h3>"; | ||
+ | var_dump( $miArray ); //Muestra en tipo y contenido de la expresión $array en este caso un array | ||
+ | echo "<h3>Mostrando información con print_R de un array</h3>"; | ||
+ | print_r( $miArray ); //Igual que el caso anterior pero con menos información en este caso solo la estructura | ||
+ | $valor = "El valor de la variable es "; | ||
+ | $valor .= print_r( $miArray, true ); | ||
+ | echo "<h3>Ahora muestro el valor de una variable a la que le he asignado lo que devuleve print_r</h3>"; | ||
+ | echo $valor; | ||
+ | </source> | ||
+ | *La salida que produce es | ||
+ | [[Archivo:salida_print_r.png|center]]<br /> | ||
+ | |||
===Funciones para manejar matrices=== | ===Funciones para manejar matrices=== | ||
*Tamaño: count(), sizeof() | *Tamaño: count(), sizeof() | ||
Línea 394: | Línea 701: | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
− | {{ | + | {{MRM_Actividad| |
*Implementar una función que busca si un determinado valor aparece en una matriz. | *Implementar una función que busca si un determinado valor aparece en una matriz. | ||
*La función recibe 2 parámetros: | *La función recibe 2 parámetros: | ||
Línea 412: | Línea 719: | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
− | {{ | + | {{MRM_Actividad| |
'''''Random Images''''' | '''''Random Images''''' | ||
*Escribir un programa que: | *Escribir un programa que: |
Última revisión de 21:23 28 oct 2019
Contenido</div> |