Diferencia entre revisiones de «Usuario:ManuelRomero/php/dwes/B2T1/arrays/concepto»

De WikiEducator
Saltar a: navegación, buscar
Línea 47: Línea 47:
 
                   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 92: Línea 93:
 
</source>
 
</source>
  
*La salida que genera es  
+
*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>
 
<source lang=php>
/var/www/ejemplos/a1.php:19:
+
 
 
array (size=6)
 
array (size=6)
 
   'PR' => string 'Programación' (length=13)
 
   'PR' => string 'Programación' (length=13)
Línea 104: Línea 106:
 
</source>
 
</source>
 
}}
 
}}
Si ahora vemos en contenido del módulo 2 nos mostrará
 
 
Por este motivo no
 
Igualmente en un array asociativo en cualquier momento podemos hacer que el sistema genera un nuevo índice para un nuevo elemento que queramos agregar.
 
 
</div>
 
</div>
  
Línea 119: Línea 117:
 
;Arrays indexados:
 
;Arrays indexados:
 
:En los arrays numéricos empezamos por 0.
 
:En los arrays numéricos empezamos por 0.
:En función del tipo de índices que tenga puede ser unidimensional o multidimensional (varios índices).
+
*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>
  
Línea 157: Línea 157:
 
$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 165: Línea 164:
 
====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'''''
*Al ser '''indexado''', si no se pone valor en índice se pondrá una unidad más al último valor 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 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 183: Línea 182:
 
[[Archivo:arrayNotas.png]]
 
[[Archivo:arrayNotas.png]]
 
*Las posiciones no especificadas no existen.
 
*Las posiciones no especificadas no existen.
</div>
 
  
 
<!--2-->
 
<!--2-->
Línea 192: Línea 190:
 
<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 204: Línea 231:
 
<source lang=php>
 
<source lang=php>
 
echo "la nota primera es $notas[0]";
 
echo "la nota primera es $notas[0]";
echo "la nota última es $nota[7]";
+
echo "la nota de la posición 7 es $nota[7]";
 
</source>
 
</source>
  
Línea 213: Línea 240:
 
;Recorrer un array
 
;Recorrer un array
 
*Tenemos diferentes modos de recorre un array.
 
*Tenemos diferentes modos de recorre un array.
 +
 +
 +
 
  count($nombreArray);
 
  count($nombreArray);
 
*Es una función que nos dice cuantos elementos tiene un array que le pasamos como argumentos
 
*Es una función que nos dice cuantos elementos tiene un array que le pasamos como argumentos

Revisión de 08:39 23 nov 2017



DWES TituloTema3 arrays.png


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.
  • En PHP puedes utilizar 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.


Icon define.gif
Definición
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.

ArrayPHP.png

  • Dependiendo del valor de la posición podemos clasificar los arrays de dos tipos:
  1. Indexado. Cada valor es un entero que indica su posición, empezando por cero.
  2. Asociativo. El valor de cada posición tiene un significado diferente a la posición que ocupa y puede ser de cualquier tipo.
// array numérico
$modulos1 = array(0 => "Programación",
                  1 => "Bases de datos", ...,
                  9 => "Desarrollo web en entorno servidor");
 
// array asociativo
$modulos2 = array("PR" => "Programación",
                  "BD" => "Bases de datos", ..., 
                  "DWES" => "Desarrollo web en entorno servidor");
$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"];
Arrays asociativos Vs indexados
Array2PHP.png

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


Icon activity.jpg
Ejemplo de asignación
  • Aunque estos conceptos los analizaremos mas tarde mira el siguiente código
<?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);
  • 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:
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)



Array numéricos o indexados

  • Clasificación en función de la clave que llevan:
  1. Clave numérica posicional : La clave especifica la posición de cada elemento.
  2. Clave con valor: La clave tiene un significado por sí mismo y tiene asociado un valor.
Arrays indexados
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


Trabajar con un array

  • A la hora de trabajar con arrays, hay que saber operar con ellos:
  1. Crear o definir un array.
  2. Asignar, agregar valores al array.
  3. Leer elementos del array.
  4. Borrar elementos del array.

Crear un array

  • Podemos usar el operador array();
  • 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.

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

Crear un array
/*
Creamos una variable '''array''' llamada ''miArray'' vacía.
Dos formas equivalentes:
*/
$miArray = array();
$miArray = [];
/*
Creamos un array indexado de ciudades
*/
$miArray = array("Burgos","Zaragoza","Huesca", "Teruel","Soria");
$miArray = ["Burgos","Zaragoza","Huesca", "Teruel","Soria"];

Escribir en un 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
$notas =[];
$notas[]=10; 
$notas[]=7;
$notas[5]= 8;
$notas [] =9;
$notas [] =6;
Escribir en un array
  • Podemos ver gráficamente como queda el array.

ArrayNotas.png

  • Las posiciones no especificadas no existen.

ArrayNotas2.png

  • Vemos como la posición 2,3 y 4 no van a existir con valores en el array.
  • Las puedo usar explícitamente.
$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)
  • 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).
array (size=6)
  0 => int 10
  20 => int 7
  5 => int 8
  1 => int 9
  2 => int 6
  21 => int 10

</source>

Leer un array

  • Hemos de diferenciar entre dos conceptos
Leer un elemento de un array

Simplemente accedemos a su posición por el índice

echo "la nota primera es $notas[0]";
echo "la nota de la posición 7 es $nota[7]";
Recorrer un array
  • Tenemos diferentes modos de recorre un array.


count($nombreArray);
  • Es una función que nos dice cuantos elementos tiene un array que le pasamos como argumentos
  • Ejemplo
$ciudades = ["Burgos","Zaragoza","Huesca", "Teruel","Soria"];
$numeroCiudadades = count($ciudades);
echo "El array tienen $numeroCiudades ciudades<br/>";
//mostrará 5 ciudades
Recorrer un array
  • Vamos a usarla con un ejemplo


Icon activity.jpg
Actividad
  • Creamos 10 notas aleatorias, y posteriormente las visualizamos
  • Sacamos la máxima la mínima y la media


    <?php
        //Creo la variable array de notas
        $notas=[];
 
 
        //Relleno el array con 10 notas
        //$notas = array_fill(0, 10,rand(1,10));
        for ($a=0;$a<10;$a++)
          $notas[$a]=rand(1,10);
 
 
        $min = $notas[0];
        $max = $notas[0];
        for ($a=0;$a<10;$a++){
            echo "Valor de la posición $a = ". $notas[$a]."<br />";
            $total+=$notas[$a];
            $min = $notas[$a]<$min ? $notas[$a] : $min;
            $max = $notas[$a]>$max ? $notas[$a] : $max;
        }
 
 
        echo "Valor de la nota media ".($total/10)."<br />";
        echo "Valor mínimo".$min."<br />";
        echo "Valor máximo ".$max."<br />";


Recorrer un array
  • Si todos los elementos están seguidos este funciona bien, pero si no es así no funcionaría correctamente.



Icon qmark.gif
Pregunta
¿Por qué no conviene usar la función count
$capitales = array();
$capital ["España"=>"Madrid", "Italia"=>"Roma","Alemania"=>"Berlín"];
Recorrer un array
  • Es lo mismo que hacer
$capitales = array("España"=>"Madrid", 
                   "Italia"=>"Roma",
                   "Alemania"=>"Berlin");
$capital ["España"=>"Madrid",
          "Italia"=>"Roma",
          "Alemania"=>"Berlin"];
*También se puede crear directamente con []
<source lang=php>
$capitales["España"]="Madrid";
$capitales["Italia"]="Roma"
$capitales["Alemania"]="Berlín";
  • Existen muchas funciones asociadas a los arrays
count($array)
me da el número de elementos.


Icon activity.jpg
Actividad

Define un array de 5 ciudades y recorrerlo con un bucle for usando count()



<?php
//defino e inicializo el vector
$ciudades[]="Valencia";
$ciudades[]="Teruel";
$ciudades[]="Burgos";
$ciudades[]="Zaragoza";
$ciudades[]="Huesca";
 
//Obtengo el número de elementos
$num= count($ciudades);
echo "hay $num ciudades";
for ($n=0; $n<$num; $n++){
    echo "ciudad $n es $ciudades[$n]<br>";
}
?>

Ver el contenido de un array

  • Podemos usar la función ya conocida var_dump()
  • También podemos usar la función print_r.

Funciones para manejar matrices

  • Tamaño: count(), sizeof()
  • Operador +: concatena dos matrices
  • Recorrer una matriz next(), prev(), reset(), current(),key(), reset()
  • busqueda preg_grep(), array_search(), in_array()
  • Ordenar sort()
  • Aquí tenemos un listado de todas las funciones, hay muchas muchas http://es1.php.net/manual/en/ref.array.php
  • Para hacer referencia a los elementos almacenados en un array, tienes que utilizar el valor clave entre corchetes:
$modulos1 [9]
$modulos2 ["DWES"]
  • Es interesante recordar que en PHP puedes crear también arrays de varias dimensiones almacenando otro array en cada uno de los elementos de un array.
// array bidimensional
$ciclos = array(
     "DAW" => array ("PR" => "Programación", 
                     "BD" => "Bases de datos", ...,
                     "DWES" => "Desarrollo web en entorno servidor"),
     "DAM" => array ("PR" => "Programación", 
                     "BD" => "Bases de datos", ... , 
                     "PMDM" => "Programación multimedia y de dispositivos móviles")
);
  • Para hacer referencia a los elementos almacenados en un array multidimensional, debes indicar las claves para cada una de las dimensiones:
$ciclos ["DAW"] ["DWES"]
  • En PHP no es necesario que indiques el tamaño del array antes de crearlo.
  • Ni siquiera es necesario indicar que una variable concreta es de tipo array.
  • Como ya hemos visto, simplemente puedes comenzar a asignarle valores:
// array numérico
$modulos1 [0] = "Programación";
$modulos1 [1] = "Bases de datos";
...
$modulos1 [9] = "Desarrollo web en entorno servidor";
// array asociativo
$modulos2 ["PR"] = "Programación";
$modulos2 ["BD"] = "Bases de datos";
...
$modulos2 ["DWES"] = "Desarrollo web en entorno servidor";
  • En PHP tampoco es necesario que especifiques el valor de la clave.
  • Al omitirla el array se irá llenando a partir de la última clave numérica existente, o de la posición 0 si no existe ninguna:
$modulos1 [ ] = "Programación";
$modulos1 [ ] = "Bases de datos";
...
$modulos1 [ ] = "Desarrollo web en entorno servidor";


Icon activity.jpg
Actividad
  • Implementar una función que busca si un determinado valor aparece en una matriz.
  • La función recibe 2 parámetros:
  1. la matriz
  2. el elemento a buscar,
  • Retorna si ha encontrado el valor (TRUE) o no (FALSE).
  1. Implementar la función, con los parámetros (el array, y el valor a buscar).
  2. Para probar la función implementada, generar un array de 100 posiciones de valores
  3. valores enteros entre 1 y 100.
  4. Generar, también, el número que hay que buscar en el array.
  5. Llamar a la función con el array y el valor como parámetros de la función.
  6. Mostrar los resultados por pantalla.




Icon activity.jpg
Actividad

Random Images

  • Escribir un programa que:
    • Inicialice un vector con 10 imágenes

podéis utilizar éste: código.php Crea el vector $imagenes.

    • La página debe mostrar, aleatoriamente, 3 imágenes
 (puedes usar como alternativa  la función shuffle ($imagenes)
 desordena el vector),
 o usar un rand para obtener indices aleatorios.
    • Cada 5 segundos ha de refrescarse la página para ir mostrando imágenes distintas

(podéis usar, por ejemplo, este trozo de código HTML y añadirlo en el <HEAD> de la página



<head>
        <meta charset="UTF-8"/>
        <meta http-equiv="refresh" content="5" url="index.php"/>
        <title></title>
    </head>
</div>

Variables globales Vs superglobales

  • Ya hemos visto como en php una variable tiene el ámbito en el cual es accesible y visible
  • Las variables son locales a la función en la cual aparecen, si queremos acceder dentro de una función a una variable del script y actuar sobre su valor, debemos hacerla global.
  • PHP Dispone un un importante conjunto de variables superglobales.
  • El desarrollador tiene acceso a dichas variables en cualquier momento del script.
  • El sistema se encarga de tenerlas actualizadas, con el valor correspondiente
Superglobales
  • PHP incluye unas Son variables internas predefinidas que pueden usarse desde cualquier ámbito, por lo que reciben el nombre de variables superglobales.
  • No es necesario que uses global para acceder a ellas.
  • Cada una de estas variables es un array que contiene un conjunto de valores
  • Posteriormente veremos cómo se utilizan los arrays).
  • Aquí puedes acceder a las variables superglobales disponibles en PHP se pueden ver son las siguientes:
Superglobales (Algunas principales)
  1. $GLOBALS Hace referencia a todas las variables disponibles en el ámbito global
  2. $_SERVER Información del entorno del servidor y de ejecución
  3. $_GET Variables HTTP GET
  4. $_POST Variables HTTP POST
  5. $_FILES Variables de Carga de Archivos HTTP
  6. $_COOKIE Cookies HTTP
  7. $_SESSION Variables de sesión
  8. $_REQUEST Variables HTTP REQUEST. Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE.
  9. $_ENV
  • Analizaremos una de ellas
$_SERVER.
Contiene información sobre el entorno del servidor web y de ejecución. Entre la información que nos ofrece esta variable, tenemos:
Principales valores de la variable $_SERVER
  1. $_SERVER['PHP_SELF']: script que se está ejecutando actualmente.
  2. $_SERVER['SERVER_ADDR']: dirección IP del servidor web.
  3. $_SERVER['SERVER_NAME']: nombre del servidor web.
  4. $_SERVER['DOCUMENT_ROOT']: directorio raíz bajo el que se ejecuta el guión actual.
  5. $_SERVER['REMOTE_ADDR']:dirección IP desde la que el usuario está viendo la página.
  6. $_SERVER['REQUEST_METHOD']:método utilizado para acceder a la página ('GET', 'HEAD', 'POST' o 'PUT')


Icon activity.jpg
Actividad
Haz un script que nos de la información de las variables vistas anteriormente