Apuntes sobre Php

Lleva décadas en el obituario y sigue aquí.

Introducción a los Arrays en PHP

Aunque al principio puedan parecer un poco complicados, los arrays son una herramienta poderosa y muy útil. Los arrays (también llamados en castellano matrices o arreglos) son varios valores apilados, cada uno con su etiqueta. En esta lección veremos cómo crearlos, y cómo usarlos

¿Qué es un array?

Un array (o matriz) es una variable especial que no guarda un solo valor, sino un conjunto de valores, cada uno identificado por un índice (también llamado key, o clave). Puedes pensar en un array como una lista numerada o un diccionario donde cada entrada tiene un nombre.
Los arrays son esenciales en todos los lenguajes de programación y, en PHP los encontrarás por todas partes

Creando arrays

Hay dos formas de crear arrays: estática (definiendo todos los valores de una vez) y dinámica (añadiendo valores sobre la marcha).

Creación estática

Usa la función array() para crear un array con la sintaxis array(indice => valor, indice => valor, ...). Los índices pueden ser números o texto, y si no los especificas, PHP los asigna empezando desde 0:

<?php
$mis_ciudades = array(
    0 => "Madrid",
    1 => "Barcelona",
    2 => "Zaragoza"
);
echo $mis_ciudades[1]; // Imprime: Barcelona
?>

También puedes usar la sintaxis corta []:

<?php
$mis_ciudades = [
    "Madrid",
    "Barcelona",
    "Zaragoza"
];
echo $mis_ciudades[0]; // Imprime: Madrid
?>

Nota: Por convención, los índices numéricos empiezan en 0.

Puedes definir arrays como constantes con const o define() para valores fijos:

<?php
const CIUDADES = ["Madrid", "Barcelona"];
echo CIUDADES[0]; // Imprime: Madrid
?>

Nota: Los arrays siguen las mismas reglas de alcance que las variables. Si los defines dentro de una función, solo existen dentro de ella. Recuerda lo que vimos en la lección de alcance de variables.

Creación dinámica

Añade valores a un array existente usando corchetes ([]). Si no especificas un índice, PHP asigna el siguiente número disponible:

<?php
$mis_ciudades = [];
$mis_ciudades[0] = "Madrid";
$mis_ciudades[1] = "Barcelona";
$mis_ciudades[] = "Valencia"; // Índice automático: 2
echo $mis_ciudades[2]; // Imprime: Valencia
?>

También puedes modificar valores existentes:

<?php
$mis_ciudades[1] = "Sevilla"; // Cambia Barcelona por Sevilla
echo $mis_ciudades[1]; // Imprime: Sevilla
?>

con array_push() puedes agregar varios elementos en una sola llamada:

<?php
$ciudades = ["Madrid"];
array_push($ciudades, "Barcelona", "Valencia", "Sevilla"); //equivalente a:
$ciudades = ["Madrid"];
$ciudades[] = "Barcelona";
$ciudades[] = "Valencia";
$ciudades[] = "Sevilla";
?>

También puedes usar la sintaxis corta para añadir valores:

<?php
$mis_ciudades = ["Madrid", "Barcelona"];
$mis_ciudades[] = "Valencia"; // Añade al final
echo $mis_ciudades[2]; // Imprime: Valencia
?>

Arrays asociativos

En lugar de índices numéricos, puedes usar cadenas como claves, creando un array asociativo (clave => valor). Esto es como un diccionario donde cada valor tiene un nombre:

<?php
$capitales = [
    "España" => "Madrid",
    "Cataluña" => "Barcelona",
    "Aragón" => "Zaragoza"
];
echo $capitales["Cataluña"]; // Imprime: Barcelona
?>

Ejemplo práctico: Un array para un menú web:

<?php
$temas = [
    "index.php" => "Introducción al FTP",
    "comandos.php" => "Comandos básicos",
    "chmod.php" => "CHMOD, asignando permisos"
];
echo $temas["index.php"]; // Imprime: Introducción al FTP
?>

Nota: Si recuperas un valor de un array, puedes forzar su tipo con casting antes de usarlo:

<?php
$datos = ["edad" => "25"];
$edad = (string)$datos["edad"]; // Casting
echo gettype($edad); // Imprime: string
?>

Arrays multidimensionales

Un array multidimensional es un array que contiene otros arrays. Es como una tabla con filas y columnas:

<?php
$agenda = [
    "domicilio" => "Calle Tal Cual",
    "telefono" => [
        "trabajo" => "7296489",
        "casa" => "5689524",
        "movil" => "9558987"
    ],
    "trabajo" => "Empresa Tal Cual"
];
echo $agenda["telefono"]["casa"]; // Imprime: 5689524
?>

Arrays hasta en la sopa

En PHP, los arrays están en todas partes. Los datos de formularios ($_POST), bases de datos, y configuraciones suelen ser arrays. Hay arrays predefinidos y globales como $_SERVER, que contiene información del servidor (IPs, rutas, referers, etc.):

Ejemplo con formularios: Los datos de formularios llegan como arrays:

<?php
// Simula $_POST
$_POST = ["nombre" => "Ana", "edad" => "25"];
echo $_POST["nombre"]; // Imprime: Ana
?>

ejemplo para obtener la IP de un visitante y la página previa:

<?php
echo $_SERVER["REMOTE_ADDR"]; // Imprime: IP del visitante
echo $_SERVER["HTTP_REFERER"] ?? "No hay referer"; // Imprime: Página previa
?>

Nota: Para detectar la IP real cuando el usuario está detrás de un proxy, comprueba primero HTTP_X_FORWARDED_FOR:

<?php
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
echo $ip; // Imprime: IP real o remota
?>

Recuperando todo el contenido

Usa print_r() para mostrar un array de forma legible:

<?php
print_r($_SERVER);
?>

Para recorrer un array, usa foreach(). Tienes dos formas:

Solo valores:

<?php
foreach ($_SERVER as $value) {
    echo "Valor: $value\n";
}
?>

Claves y valores:

<?php
foreach ($_SERVER as $key => $value) {
    echo "$key tiene el valor: $value\n";
}
?>

Otras funciones útiles

count($array): cuenta los elementos.

<?php
$ciudades = ["Madrid", "Barcelona"];
echo count($ciudades); // Imprime: 2
?>

in_array($valor, $array): comprueba si un valor existe en el array.

<?php
$ciudades = ["Madrid", "Barcelona"];
if (in_array("Madrid", $ciudades)) {
    echo "Madrid está en el array";
}
?>

array_merge($array1, $array2): combina dos arrays en uno.

<?php
$array1 = ["a" => 1];
$array2 = ["b" => 2];
$combinado = array_merge($array1, $array2);
print_r($combinado); // Array ( [a] => 1 [b] => 2 )
?>

array_keys($array): devuelve un array con todas las claves.

implode($separador, $array) convierte un array en cadena; explode($separador, $cadena) hace el proceso inverso:

<?php
$ciudades = ["Madrid", "Barcelona", "Valencia"];
$lista = implode(", ", $ciudades);
echo $lista; // Imprime: Madrid, Barcelona, Valencia

$texto = "uno;dos;tres";
$array = explode(";", $texto);
print_r($array); // Array ( [0] => uno [1] => dos [2] => tres )
?>

Recapitulación

  • Un array almacena múltiples valores identificados por un índice (numérico o de texto).
  • Sintaxis corta: []. Índices numéricos empiezan en 0 por convención.
  • Los arrays asociativos usan claves de texto ("clave" => valor), como un diccionario.
  • Los arrays multidimensionales contienen otros arrays: se accede con $array["clave1"]["clave2"].
  • foreach es la forma natural de recorrer arrays; print_r() los muestra de forma legible.
  • Funciones clave: count(), in_array(), array_merge(), array_keys(), implode() / explode().
  • Los arrays siguen las mismas reglas de alcance que las variables.

En la próxima lección: estructuras de control: if, else, switch, bucles for, while y foreach.

TOP