Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Arrays/Conceptos»
De WikiEducator
(25 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
+ | |||
__NOEDITSECTION__ | __NOEDITSECTION__ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{:Usuario:ManuelRomero/ProgramacionWeb/Arrays/nav}} | {{:Usuario:ManuelRomero/ProgramacionWeb/Arrays/nav}} | ||
Línea 13: | Línea 8: | ||
<div class="slide"> | <div class="slide"> | ||
<div class="parrafo"> | <div class="parrafo"> | ||
+ | <div class="slide"> | ||
===Arrays=== | ===Arrays=== | ||
*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. | *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 principalmente dos tipos de datos compuestos: '''''el array''''' y '''''el objeto'''''. |
*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. | *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> | ||
Línea 22: | Línea 18: | ||
<div class="slide"> | <div class="slide"> | ||
{{MRM_Definicion|Un array es un tipo de datos compuesto que nos permite almacenar varios valores en una única variable. }} | {{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 o índice''' | + | *Cada miembro del array se almacena en una posición a la que se hace referencia utilizando un '''valor clave o índice''', en la imagen representado por '''POSICIÓN''' |
[[Archivo:arrayPHP.png]] | [[Archivo:arrayPHP.png]] | ||
Línea 32: | Línea 28: | ||
#'''''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. | ||
+ | |||
+ | </div><!--1--> | ||
+ | <div class="slide"> | ||
+ | ;Arrays asociativos Vs indexados | ||
+ | [[Archivo:array2PHP.png|center]] | ||
+ | *Podemos pasar de '''''array indexado''''' a '''''array asociativo''''' creando un nuevo índice en cualquier momento. | ||
+ | {{MRM_Clave|Title=Todo es lo mismo| | ||
+ | ;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 | ||
+ | }} | ||
+ | </div><!--1--> | ||
+ | <div class="slide"> | ||
+ | |||
+ | ;En php la declaración podría quedar | ||
<source lang=php> | <source lang=php> | ||
// array numérico | // array numérico | ||
Línea 53: | Línea 62: | ||
"DWES" => "Desarrollo web en entorno servidor"]; | "DWES" => "Desarrollo web en entorno servidor"]; | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{MRM_Actividad|Title = Ejemplo de asignación| | {{MRM_Actividad|Title = Ejemplo de asignación| | ||
*Aunque estos conceptos los analizaremos mas tarde, mira el siguiente código | *Aunque estos conceptos los analizaremos mas tarde, mira el siguiente código | ||
Línea 71: | Línea 74: | ||
$modulos[] = "otro módulo"; | $modulos[] = "otro módulo"; | ||
− | //Ahora añado un módulo en el índice con valor 10 que NO ES LA POSICIÓN 10 | + | //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"; | $modulos[10] = "Módulo indexado con el índice 10"; | ||
− | //incorporamos un nuevo elmento en el array sin especificar el valor del índice | + | //incorporamos un nuevo elmento en el array |
− | //PHP asignará un valor siguiente el último valor numérico que fue el 10 (indice último numérico agragado) | + | //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"; | $modulos[] = "Último módulo añadido"; | ||
− | // | + | //Visualizo con var_dump el contenido |
+ | // y estructura de la variable $modulo | ||
var_dump($modulos); | var_dump($modulos); | ||
</source> | </source> | ||
− | *La salida que genera ver el contenido de la variable $modulos es un array de 6 elementos | + | *La salida que genera ver el contenido de la variable '''''$modulos''''' es un array de 6 elementos. |
− | * | + | *Vemos el valor de los índices y los contenidos de cada elemento: |
<source lang=php> | <source lang=php> | ||
Línea 96: | Línea 104: | ||
</source> | </source> | ||
}} | }} | ||
− | + | ||
<!--2--> | <!--2--> | ||
Línea 102: | Línea 110: | ||
===Array numéricos o indexados=== | ===Array numéricos o indexados=== | ||
− | * | + | *Como ya hemos visto. los arrays en php se clasifican 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. '''''Array Indexado''''' |
− | #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. '''''Array Asociativo''''' |
− | + | En los Arrays indexados, el índice empieza 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 | *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 | ||
Línea 127: | Línea 134: | ||
====Crear un array==== | ====Crear un array==== | ||
*Podemos usar el operador '''''array();''''' | *Podemos usar el operador '''''array();''''' | ||
− | *A partir de la versión 5.3 se puede | + | *A partir de la versión 5.3 se puede (y recomienda) usar directamente el operador '''''[]''''' |
− | *En php no hay que especificar ni índice ni lógicamente tipo. | + | *En php no hay que especificar tamaño , ni cómo va a ser el índice ni lógicamente tipo (ni de índice ni de contenido). |
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 152: | Línea 159: | ||
<!--2--> | <!--2--> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
====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 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 | + | *Si pongo un valor superior al número de índices, el siguiente elemento estará en una posición más: |
<source lang=php> | <source lang=php> | ||
$notas =[]; | $notas =[]; | ||
Línea 171: | Línea 179: | ||
*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. | + | *Las posiciones no especificadas '''no existen'''. |
<!--2--> | <!--2--> | ||
Línea 180: | Línea 188: | ||
<source lang=php> | <source lang=php> | ||
$notas[2]= 8; | $notas[2]= 8; | ||
− | + | </source> | |
</div> | </div> | ||
;Escribir en un array | ;Escribir en un array | ||
Línea 207: | Línea 215: | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
</div> | </div> | ||
Línea 246: | Línea 251: | ||
echo "El valor de la variable $notas es -$nota- | echo "El valor de la variable $notas es -$nota- | ||
</source> | </source> | ||
− | *El código anterior saldría | + | *El código anterior saldría: |
<source lang=php> | <source lang=php> | ||
la nota primera es 6 | la nota primera es 6 | ||
Línea 252: | Línea 257: | ||
El valor de la variable $notas es -Array- | El valor de la variable $notas es -Array- | ||
</source> | </source> | ||
− | Vemos | + | Vemos cómo al escribir el nombre del array no veríamos su contenido si no el tipo del valor. |
− | + | ||
<!--2--> | <!--2--> | ||
Línea 266: | Línea 271: | ||
//Inicializo un array de tamaño entre 20 y 30 elementos | //Inicializo un array de tamaño entre 20 y 30 elementos | ||
− | $ | + | $size = rand(10,15); |
− | for ($n = 0; $n<$ | + | for ($n = 0; $n<$size ; $n++){ |
$notas[]=rand(0,10); | $notas[]=rand(0,10); | ||
} | } | ||
Línea 338: | Línea 343: | ||
<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 un for obteniendo el tamaño del array con '''''count''''' o bien con '''''sizeof'''''}} |
− | *Esta no es una forma conveniente de recorrer un array en php, pues no tiene | + | <br /> |
+ | *Esta no es una forma conveniente de recorrer un array en php, pues no tiene por qué coincidir en el índice de cada elemento con su posición numérica. | ||
*Supongamos el siguiente caso | *Supongamos el siguiente caso | ||
<source lang=php> | <source lang=php> | ||
Línea 358: | Línea 364: | ||
</source> | </source> | ||
*La forma de leerla sería | *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: | *O bien: | ||
<source lang=php> | <source lang=php> | ||
− | foreach ($array as $ | + | foreach ($array as $indice => $valor){ |
.... | .... | ||
} | } | ||
</source> | </source> | ||
*Cuya lectura sería | *Cuya lectura sería | ||
− | + | Para cada elemento de $array, | |
− | + | toma el valor del índice y lo guardas en la variable $indice | |
+ | y el valor del contenido lo guardas en la variable $valor | ||
+ | Esto se repite hasta que llegue al último elemento | ||
+ | *''''Es decir para cada elemento del array'''' (cada uno de ellos. por lo tanto es una iteración). | ||
<!--2--> | <!--2--> | ||
Línea 382: | Línea 391: | ||
//Accediendo solo a los contendios | //Accediendo solo a los contendios | ||
echo "<h2>Vamos a ver las capitales del array </h2>"; | echo "<h2>Vamos a ver las capitales del array </h2>"; | ||
− | //$capital es el nombre de una variable | + | //$capital es el nombre de una variable |
+ | //Lógicamente este identificador es libre de usar, | ||
+ | // (podemos elegir el nombre que queramos) | ||
foreach ($capitales as $capital){ | foreach ($capitales as $capital){ | ||
echo "La capital de la posición <b>$n</b> es <b>$capital</b><br />"; | echo "La capital de la posición <b>$n</b> es <b>$capital</b><br />"; | ||
Línea 390: | Línea 401: | ||
//Si quiero ver también los índices | //Si quiero ver también los índices | ||
echo "<h2>Vamos a ver los paises con sus capitales del array </h2>"; | echo "<h2>Vamos a ver los paises con sus capitales del array </h2>"; | ||
− | //Tanto $pais como $capital son nombres de variables que | + | //Tanto $pais como $capital |
+ | //son nombres de variables que establecemos | ||
+ | //(podemos elegir los nombres que queramos). | ||
$n=0; | $n=0; | ||
foreach ($capitales as $pais =>$capital){ | 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 />"; | + | echo "La capital de la posición <b>$n</b> del país <b>$pais </b> |
+ | es <b>$capital</b><br />"; | ||
$n++; | $n++; | ||
} | } | ||
Línea 399: | Línea 413: | ||
?> | ?> | ||
</source> | </source> | ||
− | *La salida generada será | + | *La salida generada será: |
<source lang=php> | <source lang=php> | ||
Vamos a ver las capitales del array | Vamos a ver las capitales del array | ||
Línea 457: | Línea 471: | ||
} | } | ||
</source> | </source> | ||
− | *Esto es | + | *Esto es porque en realidad en cada interación se está cogiendo el valor del elemento del array '''''$productos''''' y se copia en la variable '''''$producto''''' 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 | 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> | <source lang=php> | ||
Línea 536: | Línea 550: | ||
$pais = key($capitales); //Obtener el indice actual | $pais = key($capitales); //Obtener el indice actual | ||
$capital = current($capitales); //Obtener el valor del elemento actual del array | $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 />"; | + | echo "La capital de la posición <b>$n</b> del país <b> $pais </b > es |
+ | <b > $capital</b ><br />"; | ||
$n++; | $n++; | ||
− | }while (next($capitales)); //Next avanza al siguiente elemento del array, cuando llegue al último dará false | + | }while (next($capitales)); |
+ | //Next avanza al siguiente elemento del array, | ||
+ | // cuando llegue al último dará false | ||
Línea 561: | Línea 578: | ||
$miArray = [ "Burgos", "Zaragoza", "Huesca", "Teruel", "Soria" ]; | $miArray = [ "Burgos", "Zaragoza", "Huesca", "Teruel", "Soria" ]; | ||
echo "<h3>Mostrando información con var_dump de un array</h3>"; | 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 | + | 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>"; | 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 | + | 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 = "El valor de la variable es "; | ||
$valor .= print_r( $miArray, true ); | $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 "<h3>Ahora muestro el valor de una variable |
+ | a la que le he asignado lo que devuleve print_r</h3>"; | ||
echo $valor; | echo $valor; | ||
</source> | </source> | ||
Línea 573: | Línea 595: | ||
===Recorrer un string como un array de caracteres=== | ===Recorrer un string como un array de caracteres=== | ||
*Podemos recorrer un array como un vector de caracteres | *Podemos recorrer un array como un vector de caracteres | ||
− | *Esto nos puede permitir controlar y gestionar los string analizando cada carácter | + | *Esto nos puede permitir controlar y gestionar los string analizando cada carácter. |
− | {{MRM_Actividad | + | |
+ | {{MRM_Actividad|Title=Recorrer un string| | ||
;Muestra los caracteres de un string carácter a carácter | ;Muestra los caracteres de un string carácter a carácter | ||
<source lang=php> | <source lang=php> | ||
Línea 580: | Línea 603: | ||
for ($n=0; $n<strlen($nombre); $n++){ | for ($n=0; $n<strlen($nombre); $n++){ | ||
echo "Cáracter en posicion <strong>$n</strong> es <strong>".$nombre[$n]."</strong><br />"; | echo "Cáracter en posicion <strong>$n</strong> es <strong>".$nombre[$n]."</strong><br />"; | ||
− | } | + | }} |
</source> | </source> | ||
*La salida: | *La salida: | ||
[[Archivo:string_array.png]] | [[Archivo:string_array.png]] | ||
− | |||
===Funciones para manejar matrices=== | ===Funciones para manejar matrices=== | ||
+ | <br /> | ||
+ | {{MRM_Web|Funciones de array| | ||
+ | http://https://www.php.net/manual/es/ref.array.php | ||
+ | }} | ||
+ | ;Alguna de ellas | ||
*Tamaño: count(), sizeof() | *Tamaño: count(), sizeof() | ||
+ | *Crear un array de un determinado tamaño y valor '''''array_fill()''''' | ||
+ | *Pasar una función a cada elemento de un array_map() | ||
+ | *Obtener valores máximos, mínimos, sumar : max(), min(), array_sum | ||
*Operador +: concatena dos matrices | *Operador +: concatena dos matrices | ||
*Recorrer una matriz next(), prev(), reset(), current(),key(), reset() | *Recorrer una matriz next(), prev(), reset(), current(),key(), reset() | ||
− | *busqueda | + | *busqueda array_search(), in_array() y con expresiones regulares preg_grep(), |
*Ordenar sort() | *Ordenar sort() | ||
− | * | + | *Elinina duplicados array_reduce() |
+ | *Dividir/crear una cadena en un array especificando un carácter de separacion explode(), implode() | ||
</div> | </div> | ||
+ | ;funciones que utilizan callback para trabajar con arrays | ||
+ | *Son funciones que reciben como al menos uno de sus parámetros una función de callback | ||
+ | *La implmentación de la función la realiza el programador | ||
+ | *Las funciones se aplican a los elemento/s del array, a cada uno de ellos, que los recibe como argumento. | ||
+ | *Ejemplos de alguna de esas funciones: | ||
+ | array_reduce | ||
+ | array_map | ||
+ | array_filter | ||
+ | array_walk | ||
+ | |||
+ | |||
+ | |||
+ | {{MRM_Actividad|Title=Probando funciones| | ||
+ | *Crea un array de notas de 15 alumnos | ||
+ | *Inicializalas con 0 | ||
+ | *Asiga a cada nota un valor aleatorio entre 5 y 10 | ||
+ | *Visualiza el array con un var_dump y verfica sus valores | ||
+ | *Obtener la nota máxima, la mínima y la media del array | ||
+ | *Crea otro array de notas de 15 alumnos con notas entre 0 y 5 | ||
+ | *Junta los dos array en uno solo | ||
+ | *Vuelve a realizar las acciones anteriores | ||
+ | *Recorre el array con un foreach | ||
+ | *REaliza el recorriod con las funciones de recorrido especificadas anteriormente, mostrando en cada caso el ínice y valor | ||
+ | *Busca el primer 10 en el array y devuelve su posición | ||
+ | *Confirma si hay un 11 y un 4 como valores dentro del arrayu | ||
+ | *Ordena el array ascendentemente y muéstralo | ||
+ | *Ordena el array descendentemente y muéstralo | ||
+ | *Elinina valores repetidos y muéstralos | ||
+ | |||
+ | }} | ||
+ | |||
<!--2--> | <!--2--> |
Última revisión de 06:19 30 nov 2023