Usuario:ManuelRomero/ProgramacionWeb/INAEM2019/Arrays/concepto

{|cellpadding="5" cellspacing="6" style="width:100%;background:#DFFFFF; border-style:solid; border-width:2px; border-color:#0066FF;"
 * width="100%" valign="top" style="padding: 0; margin:0px;" |

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.


 * Cada miembro del array se almacena en una posición a la que se hace referencia utilizando un valor clave o índice.


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

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
 * Arrays asociativos Vs indexados

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


 * Crear un array

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


 * Escribir en un array
 * Podemos ver gráficamente como queda el array.
 * Las posiciones no especificadas no existen.


 * Vemos como la posición 2,3 y 4 no van a existir con valores en el array.
 * Las puedo usar explícitamente.
 * 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).


 * Un array se puede inicializar de los siguientes modos:


 * También se puede crear directamente con []

Leer un array
Simplemente accedemos a su posición por el índice Vemos como al escribir el nombre del array no veríamos su contenido si no el tipo del valor.
 * Hemos de diferenciar entre dos conceptos:
 * Leer un elemento de un array
 * Recorrer un array
 * Leer un elemento de un array
 * El código anterior saldría,


 * 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


 * Recorrer un array
 * Vamos a usarla con un ejemplo


 * Recorrer un array


 * 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


 * Recorrer un array
 * La forma de recorrer un array en php es con la estructura de control foreach
 * 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:
 * 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


 * Veamos un ejemplo y la salida que produce
 * La salida generada será

Modificar un array recorrido
Un array de productos de cada uno de los cuales vamos a tener nombre y precio 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 en lugar de El código completo que sí que modifica el array sería
 * Supongamos que queremos modificar el contenido de un array que estamos recorriendo.
 * Por ejemplo supongamos que tenemos la siguiente estructura de datos
 * 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
 * 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.


 * 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
 * Vemos el ejemplo anterior
 * Y la salida que genera

Ver el contenido de un array

 * Podemos ver el contenido de un array de forma completa, usando las funciones de var_dump y print_r.
 * 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.
 * La salida que produce es

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:


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


 * Para hacer referencia a los elementos almacenados en un array multidimensional, debes indicar las claves para cada una de las dimensiones:
 * 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:


 * 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:

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


 * }