Skip to content

1 arrays en php

@intelguasoft edited this page Jan 22, 2020 · 1 revision

Curso Master PHP

Arreglos

Un array es un mapa ordenado que asocia valores con claves (values con keys). Esta forma de organizar los datos permite manejarlos en forma de listas, tablas asociativas, colecciones, diccionarios o lo que sea necesario. El objetivo es poder acceder, administrar y modificar los datos empleando su sintaxis básica, estructuras de control y funciones especializadas.

Indice de contenido

  1. Sintaxis
  2. Acceso y modificación de elementos de un array
  3. Arrays multidimensionales
  4. Referencias en arrays
  5. Comparación de arrays

1. Sintaxis

Un array puede crearse de dos formas:

  • Mediante el constructor del lenguaje array():
$miArray = array(
    'key' => 'value',
    'key2' => 'value2',
    'key3' => 'value3'
    // ...
);
  • Mediante corchetes []:
$miArray = [
    'key' => 'value',
    'key2' => 'value2',
    'key3' => 'key3'
    //...
];

La coma después del último elemento del array es opcional.

La key puede ser un integer o un string. El value puede ser de cualquier tipo.

Consideraciones respecto a las keys de un array:

  • Un string que contenga un integer válido se amoldará a tipo integer. Ejemplo: "8" se guardará como integer 8 (no ocurre lo mismo con "08").
  • Un float también se amoldará a un integer, la parte fraccionaria se elimina. Ejemplo: 8,7 se guardará como 8.
  • Los booleanos se amoldan a integers también, true se almacena como 1 y false como 0.
  • Un null se amoldará a un string vacío, "".
  • Los arrays y objetos no pueden utilizarse como keys.
  • Si varios elementos usan el mismo key, se devolverá el último, los demás serán sobreescritos.
$animales = [
    1 => "Perro", // 1
    "1" => "Gato", // 1, sobreescribe al anterior
    1.6 => "Avestruz", // 1, sobreescribe al anterior
    true => "Rinoceronte" // 1, sobreescribe al anterior
];
// El único valor del array será [1] => "Rinoceronte"

Especificar la key es opcional, si no se hace se añade automáticamente como key un integer incremental:

$miArray = [
    "a",
    "b",
    5 => "c",
    "d"
];
// El key integer será último key numérico + 1
array (size=4)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
  5 => string 'c' (length=1)
  6 => string 'd' (length=1)

2. Acceso y modificación de elementos de un array

Se puede acceder a los elementos de un array con la sintaxis de llaves array{key} o de corchetes array[key]:

$planetas = [
    1 => "Marte",
    "Otro" => "Júpiter",
    "4" => "Saturno",
    "Otromas" => "Plutón"
];

echo $planetas[1] . PHP_EOL; // Devuelve Marte
echo $planetas{"Otro"} . PHP_EOL; // Devuelve Júpiter

También es posible hacer referencia al array resultado de una función:

function misAnimales()
{
    return array("perro", "gato", "avestruz");
};

$miPerro = misAnimales()[0];
echo $miPerro; // Devuelve perro

Si se intenta acceder a una key de un array que no se ha definido ocurrirá lo mismo que al intentar acceder a una variable sin definir: el resultado será null y se emitirá un mensaje de error E_NOTICE.

Crear elementos en un array

Para crear los elementos de un array se utilizan también los corchetes de la misma forma. Si no se incluye nada en los corchetes la key será un integer incremental automático, igual que cuando se crean arrays y no se indica el key:

$animales = [
    "perro" => "Bobby",
    "gato" => "Puskas",
    "avestruz" => "Charles"
];
// Crear elementos de un array:
$animales["rinoceronte"] = "Brutus"; // Se crea el key rinoceronte con el nombre Brutus
$animales[] = "Bob"; // Se crea directamente el nombre de la mascota, con key numérica 0

Modificar elementos en un array

Para modificar elementos de un array se hace lo mismo, salvo que en los corchetes se incluye el elemento que se quiere modificar, sea numérico o asociativo:

$animales["perro"] = "Casanova"; // Se modifica el nombre del perro a Casanova
$animales[0] = "Browneyes"; // Se modifica el valor Bob del key 0 por Browneyes

Si el array al que se quiere añadir o modificar un elemento no existe, se crea, por lo que ésta también es una forma de crear un array, pero no es aconsejable. Siempre es mejor iniciar variables mediante asignación directa.

Eliminar elementos en un array

Para eliminar elementos de un array se emplea unset():

unset($animales["perro"]) // Elimina el elemento de key perro
unset($animales); // Elimina el array entero

Con unset() el array no se reindexa. Los keys numéricos en el array guardan el último key que ha estado presente en el array, aunque se haya eliminado con unset() y luego se cree de nuevo. A los nuevos valores que se inserten sin key, se les asignará el número de ese último key anterior al unset:

// Crear un array simple.
$miArray = array(1, 2, 3, 4, 5);
print_r($miArray); // Devuelve: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
// Ahora elimina cada elemento, pero deja el mismo array intacto:
foreach ($miArray as $i => $value) {
    unset($miArray[$i]);
}
print_r($miArray); // Devuelve: Array ( )
// Agregar un elemento (nótese que la nueva clave es 5, en lugar de 0).
$miArray[] = 6;
print_r($miArray); // Devuelve: Array ( [5] => 6 )
// Para evitar esto se puede emplear array_values
// La función array_values modifica este comportamiento y resetea los keys:
$miArray = array_values($miArray);
$miArray[] = 7;
print_r($miArray); // Devuelve: Array ( [0] => 6 [1] => 7 )

3. Arrays multidimensionales

Los arrays multidimensionales son arrays que contienen uno o más arrays. Sirven para guardar valores con más de un key. PHP interpreta arrays multidimensionales de cualquier nivel de profundidad, pero más de tres niveles es considerado poco práctico y complejo de entender.

Para acceder a un valor de un array de segundo nivel, se necesita emplear dos veces los corchetes, para acceder a un valor de un array de tercer nivel, tres corchetes, y así sucesivamente.

Ejemplo con dos niveles:

// El array guarda datos de Animal, Nombre y Edad
$animales = array
(
    array("perro","Peanut",7),
    array("gato","Prince",13),
    array("avestruz","Schmoopie",4),
);
echo "El animal es un " . $animales[0][0] . " tiene " . $animales[0][2] . " años y se llama " . $animales[0][1];
// El animal es un perro tiene 7 años y se llama Peanut

Ejemplo con tres niveles:

$animales = array
(
    array("perro", array("Sparky")),
    array("gato", "Soldier", 13),
    array("avestruz", "Spunky", 4),
);
echo "El animal es un " . $animales[0][0] . " y se llama " . $animales[0][1][0];
// El animal es un perro y se llama Sparky

4. Referencias en arrays

Es posible pasar los valores de un array por referencia, de esta forma se pueden modificar todos los valores de un array de vez mediante un loop:

$animales = array('perro', 'gato', 'liebre', 'jabalí');

foreach ($animales as &$animal)
{
    $animal = mb_strtoupper($animal);
}
unset($animal);
var_dump($animales);

Se hace unset($animal) para asegurar que las escrituras subsiguientes a $animal no modifiquen el último elemento del array, ya que hemos empleado foreach.

También se pueden copiar arrays por referencia, para que cualquier modificación en una, afecte a otra:

$animales1 = array('perro', 'gato', 'liebre', 'jabalí');

$animales2 = $animales1;

$animales2[] = 'león'; // Sólo cambia animales2, que se le añade el león
// $animales1 tiene la misma lista inicial

$animales3 =& $animales1;
$animales3[] = 'tigre'; // Ahora $animales1 y $animales3 tienen los mismos animales
// Los 4 iniciales + tigre

5. Comparación de arrays

La comparación de arrays, como en los strings, se puede realizar con los símbolos de igual (==) o idéntico (===).

$a = array('a'=>1, 'b'=>2, 'c'=>3); // Array de referencia
$b = array('a'=>1, 'b'=>2, 'c'=>3); // Igual e idéntica
$c = array('a'=>1, 'b'=>2); // Un elemento menos
$d = array('a'=>1, 'b'=>100, 'c'=>3); // Un elemento tiene un valor diferente
$e = array('a'=>1, 'c'=>3, 'b'=>2);  // Mismos key=>value pero en diferente orden
echo '$a == $b es ', var_dump($a == $b); // $a == $b es boolean true
echo '$a === $b es ', var_dump($a === $b); // $a === $b es boolean true
echo '$a == $c es ', var_dump($a ==$c); // $a == $c es boolean false
echo '$a === $c es ', var_dump($a === $c); // $a === $c es boolean false
echo '$a == $d es ', var_dump($a ==$d); // $a == $d es boolean false
echo '$a === $d es ', var_dump($a === $d); // $a === $d es boolean false
echo '$a == $e es', var_dump($a ==$e); // $a == $e es boolean true
echo '$a === $e es', var_dump($a === $e); // $a === $e es boolean false
Anterior Siguiente

Indice de contenidos

Básicos Sintaxis básica
Operadores
Operadores bit a bit
Variables
Estructuras de control
Constantes y constructores base
Espacio de nombres
Extensiones
Configuraciones
Variables al descubierto
Recolector de basuras
Rendimiento (Performance)
Funciones Funciones
Argumentos en funciones
Funciones variables
Valores por referencia en funciones
Funciones que devuelven algo
Ámbito de variables
Funciones anónimas y closure's
Cadenas y patrones Las comillas y las cadenas de caracteres
Heredoc y Nowdoc
Comparando cadenas de caracteres
Extracción en cadenas de caracteres
Análisis en cadenas de caracteres
Reemplazos en cadenas de caracteres
Formato de cadena de caracteres
Expresiones regulares (RegEx)
Codificación de caracteres
Codificación en cadenas de caracteres
Arreglos (Array's) Arreglos
Arreglos asociativos
Iterar arreglos
Funciones de arreglos
SPL Arreglos mediante objetos
Conversión de arreglos
Archivos (I/O) Manejo de archivos
Lectura de archivos
Escritura de archivos
Funciones del sistema de archivos
Socket's y archivos
Streams (?)
Seguridad Concepto y funcionamiento CGI
Configurando la seguridad
Seguridad en Sesiones
Ataques XSS
Ataques CSRF
Ataques SQLInjection
Ataques CodeInjection
Ataques EmailInjection
Filtrado de datos de entrada
Escape de datos de salida
Encriptación y contraseñas
Seguridad en el almacenamiento de datos
Seguridad en la subida de datos
SSL y OpenSSL
Base de datos Principios básicos SQL
Los joins en SQL
Principales funciones SQL
Preparando sentencias SQL
Transacciones en SQL
Algo de PDO
Programación Orientada a Objetos Instancias de clases
Modificadores y herencia de clases
Interfaces
Excepciones
Auto-carga (Autoload)
Reflexión (Reflection)
Determinación de tipos (Type hinting)
Constantes de clase
Enlace estático de ejecución (Late Static Binding)
Métodos mágicos
Librería estándar PHP (SPL)
Generadores (Generators)
Traits
Clases abstractas
Formatos de información Algo de XML
Algo de SimpleXML
Algo de XML Parser
Algo de PHP DOM
Algo de Web Services
Web Services con SOAP
Algo de REST
Algo de JSON
Formato de fecha y hora
Características web's Sesiones
Formularios
Métodos GET y POST
Cookies
Protocolo HTTP y sus headers
Autenticación HTTP
Códigos de estado HTTP
Referencias Referencias
Recopilación
Conclusión

Clone this wiki locally