1.5 · Arrays y cadenas de caracteres

Nivel 1 · Fundamentos del lenguaje

1.5Arrays y cadenas de caracteres

Objetivo: dominar los arrays (indexados, asociativos, multidimensionales) y aprovechar las funciones nativas de arrays/cadenas — la estructura y las herramientas centrales de manipulación de datos.
Tiempo estimado: 11 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Indexado = lista, asociativo = datos nombrados: $tab[0] por posición, $tab['nom'] por clave — elegir según la naturaleza.
  • Multidimensional = la forma de la web: lista de filas asociativas — exactamente un resultado de consulta, recorrido en foreach.
  • No reinventar: count, in_array, array_map/filter, implode/explode, str_replace, trim… — y mb_* para Unicode.

Minicaso hilado — Riad estructura sus datos en Constantine

Riad recibe la lista de las prestaciones con sus tarifas: primero las guarda en variables separadas $p1, $p2, $p3 — y se lía en cuanto llega la cuarta. Lo reestructura en array asociativo por prestación, y luego en lista multidimensional lista para mostrar en foreach. Sustituye su bucle casero de búsqueda por in_array, su conteo manual por count, y corrige un strlen que cortaba un título acentuado pasando a mb_strlen. Sus datos tienen por fin una forma que crece sin romperse.

Último episodio del caso 1.1-1.4 — Riad estructura sus datos tras las variables, las decisiones, los bucles y las funciones.

1. Los arrays, estructura central

Los arrays son LA estructura de datos de PHP. El array indexado: acceso por índice numérico (desde 0) — $fruits = ['pomme', 'banane']; $fruits[0]. El array asociativo: acceso por una clave textual — $personne = ['nom' => 'Alice']; $personne['nom'] (omnipresente: datos estructurados). Los arrays pueden ser multidimensionales (arrays dentro de arrays — ej. una lista de usuarios). Se recorren con foreach, se cuentan con count(), se añade con $tab[] = valor;.

Riad ordena sus prestaciones en lista de asociativos (nombre + tarifa cada uno): añadir una prestación es añadir una línea — nunca más una variable $p4.

2. Funciones nativas y Unicode

PHP tiene cientos de funciones nativas. Arrays: count, in_array, array_map (transformar), array_filter (filtrar), array_reduce (agregar), implode / explode. Cadenas: strlen, str_replace, substr, trim, str_contains (PHP 8). Reflejo: no reinventar lo que existe (la doc oficial es excelente). Vigilancia Unicode: las funciones clásicas trabajan sobre BYTES (problema con los acentos en UTF-8) — usar las funciones multibyte (mb_strlen, mb_substr).

Riad cuenta con count, busca con in_array, y mide sus títulos acentuados con mb_strlen: tres bucles caseros eliminados, una visualización corregida.

Error frecuente de interpretación: « Los arrays indexados bastan para todo » o « strlen cuenta los caracteres ». No. Los datos nombrados (usuario, producto, fila de base) piden un asociativo: $config[3] no dice nada, $config['langue'] lo dice todo — la elección sigue la naturaleza de los datos. Y strlen cuenta BYTES: en UTF-8, una « é » pesa dos bytes, así que strlen la cuenta doble — para texto acentuado, es mb_strlen quien cuenta justo.
Arrays y funciones La estructura central Indexado / asociativoPor índice (0…) / por clave textual+MultidimensionalArrays dentro de arrays (resultados de base)+Funciones nativascount, array_map/filter, mb_* (Unicode) No reinventar: buscar la función nativa, consultar la doc.
La estructura central
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Elegir: Riad pone las listas homogéneas en indexado, las entidades nombradas en asociativo, las colecciones de entidades en multidimensional. 2) Recorrer: foreach sobre la lista, acceso seguro a las claves con ??, añadido con $tab[] =. 3) Equipar: count, in_array, array_map/filter en lugar de bucles caseros; mb_* en cuanto el texto está acentuado. Lección: la forma correcta + la función nativa = datos que crecen sin romperse.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Indexado, asociativo, multidimensional

La forma de los datos web, como Riad para sus prestaciones.

$utilisateurs = [
    ['nom' => 'Alice', 'age' => 30],
    ['nom' => 'Bob', 'age' => 25],
];
foreach ($utilisateurs as $u) {
    echo htmlspecialchars($u['nom']) . ' ';
}
echo count($utilisateurs); // 2

Lectura: exactamente la forma de un resultado de consulta (lista de filas), recorrida en foreach.

Lección: acceso seguro a las claves con ?? ($tab['cle'] ?? defecto) — nunca una clave ausente sorpresa.

Vocabulario de la sección

Array indexado
Colección cuyos elementos son accesibles por un ÍNDICE numérico (desde 0): $fruits = ['pomme', 'banane']; $fruits[0].

Ejemplo sencillo: La lista de los nombres de prestaciones de Riad.

Lo que no es: un asociativo para una simple lista ordenada.

Reflejo: lista homogénea, orden que cuenta = indexado.

Array asociativo
Colección cuyos elementos son accesibles por una CLAVE textual: $personne = ['nom' => 'Alice']; $personne['nom']. Omnipresente (datos estructurados).

Ejemplo sencillo: Cada prestación de Riad (nombre + tarifa nombrados).

Lo que no es: $prestation[1] en lugar de $prestation['tarif'].

Reflejo: datos nombrados = claves explícitas.

Array multidimensional
Arrays DENTRO de arrays (ej. una lista de usuarios, cada uno un array asociativo); representa datos complejos.

Ejemplo sencillo: El catálogo completo de Riad, listado y luego mostrado.

Lo que no es: variables $p1, $p2, $p3 separadas.

Reflejo: lista de entidades = indexado de asociativos.

Funciones de arrays/cadenas
Cientos de funciones nativas: arrays (count, in_array, array_map/filter/reduce, sort, implode/explode…), cadenas (strlen, str_replace, substr, trim, str_contains…).

Ejemplo sencillo: El count y el in_array que sustituyen los bucles caseros de Riad.

Lo que no es: un bucle manual para buscar un valor.

Reflejo: antes de un bucle: ¿existe la nativa?

Funciones multibyte (mb_)
Para tratar correctamente Unicode (caracteres acentuados/no latinos): mb_strlen, mb_substr…; las funciones clásicas trabajan sobre bytes (problema en UTF-8).

Ejemplo sencillo: El título acentuado de Riad medido en mb_strlen.

Lo que no es: truncar « référencement » con substr y cortar un carácter.

Reflejo: texto acentuado = mb_* sistemático.

En la práctica — En la práctica — Manipular arrays y cadenas

  1. Cree un array indexado y un array asociativo; acceda a sus elementos (por índice / por clave) y añada un elemento (`$tab[] = ...`).
  2. Cree un array multidimensional (ej. una lista de usuarios, cada uno un array asociativo) y recórralo con foreach.
  3. Use funciones de arrays: count, in_array, array_map (transformar), array_filter (filtrar), implode/explode.
  4. Manipule cadenas: strlen, str_replace, substr, trim, strtolower; y localice las funciones multibyte (mb_strlen) para Unicode.
Domina los arrays (indexados, asociativos, multidimensionales) y aprovecha las funciones nativas de arrays/cadenas — la estructura y las herramientas centrales de manipulación de datos en PHP.

Script listo para decir — defender la función nativa (30 s)

« Antes de escribir este bucle, verifiquemos si existe una nativa: in_array busca, array_filter filtra, implode une — probadas, rápidas, legibles. Reservamos nuestro código para la lógica de negocio, no para reescribir lo que PHP ya hace. »

Para decir en revisión de código; abrir php.net sobre la función candidata.

Modelo copiar-pegar — catálogo multidimensional + nativas + mb_*

 'Vitrine', 'tarif' => 10000],
    ['nom' => 'Boutique', 'tarif' => 25000],
];
$catalogue[] = ['nom' => 'Sur mesure', 'tarif' => 50000];
echo count($catalogue); // 3
foreach ($catalogue as $prestation) {
    echo htmlspecialchars($prestation['nom']) . ' : ' . $prestation['tarif'] . "\n";
}
$tarifs = array_column($catalogue, 'tarif');
echo in_array(25000, $tarifs) ? 'Tarif present' : 'Absent';
echo mb_strlen('Référencement'); // cuenta justo los acentuados

Catálogo en Constantine

Como Riad: lista de asociativos nombre/tarifa — la visualización en foreach sigue la forma exacta de un futuro resultado de base.

Clave quizá ausente

$prestation['promo'] ?? 'aucune': el acceso seguro evita la advertencia cuando una fila no tiene la clave.

Búsqueda o filtro

in_array para « ¿existe? », array_filter para « ¿cuáles? » — dos nativas en lugar de dos bucles caseros.

Texto acentuado

Títulos en francés obliga: mb_strlen/mb_substr para medir y truncar sin cortar un carácter acentuado.

✓ Buenas prácticas

  • Elegir indexado (lista) o asociativo (datos nombrados) según la naturaleza de los datos.
  • Acceder con seguridad a las claves (isset, ?? para las claves ausentes).
  • Buscar una función nativa antes de escribir un bucle.

✗ Errores frecuentes

  • Acceder a una clave ausente sin verificar (advertencia/error).
  • Tratar texto acentuado con strlen/substr (bytes) en lugar de mb_*.
  • Reescribir a mano lo que una función nativa hace mejor.

Puntos clave

  • Los ARRAYS son LA estructura central de PHP: INDEXADOS (índice numérico, `$tab[0]`), ASOCIATIVOS (clave textual, `$tab['nom']`, omnipresentes), MULTIDIMENSIONALES (arrays dentro de arrays).
  • PHP tiene CIENTOS de funciones nativas: arrays (count, in_array, array_map/filter/reduce, sort, implode/explode) y cadenas (strlen, str_replace, substr, trim, str_contains).
  • REFLEJO: no reinventar lo que existe — antes de escribir un bucle, buscar la función nativa (a menudo más eficaz). La doc oficial PHP es excelente, consultarla.
  • Atención a UNICODE: las funciones clásicas (strlen, substr) trabajan sobre BYTES (problema con los acentos/caracteres no latinos en UTF-8); usar las funciones MULTIBYTE (mb_*).

Reto 48h — aplique mañana

Reestructure variables separadas en array (modelo anterior): sustituya un bucle casero por count/in_array/array_filter y un strlen sobre texto acentuado por mb_strlen. Verifique la visualización. 25 minutos bastan.

Lista de salida de la sección
  • Elijo indexado, asociativo o multidimensional según los datos.
  • Uso las nativas (count, in_array, array_map/filter, implode/explode).
  • Trato Unicode en mb_* y accedo a las claves en ?? seguro.
Autoevaluación 1-5: ¿mis datos tienen la forma adaptada (lista vs nombrados)?¿busco la nativa antes de escribir un bucle?

Preguntas frecuentes

¿Arrays indexados o asociativos: cuándo usar cuál, y cómo emplearlos bien?

Array INDEXADO: acceso por índice numérico — representa una LISTA de elementos de la misma naturaleza (`$couleurs = ['rouge', 'vert', 'bleu']`), cuando el orden cuenta o se recolecta (`$tab[] = ...`). Array ASOCIATIVO: acceso por CLAVE textual que tiene un sentido — representa datos ESTRUCTURADOS (`$utilisateur = ['nom' => 'Alice', ...]`), para una entidad (usuario, producto, fila de base). Muy frecuente en PHP web (`$_POST`, resultados de base). La COMBINACIÓN (multidimensional) es omnipresente: un INDEXADO de ASOCIATIVOS = una lista de entidades, exactamente un resultado de consulta, recorrida con foreach. Buenas prácticas: elegir según la naturaleza, nombrar las claves con claridad, acceder con seguridad (isset, `??`), recorrer con foreach.

¿Por qué apoyarse en las funciones nativas de PHP en lugar de programarlo todo uno mismo?

AHORRO DE TIEMPO (in_array en una llamada vs un bucle), FIABILIDAD (probadas por millones de usos, casos límite gestionados), RENDIMIENTO (implementadas en C, rápidas), LEGIBILIDAD (`array_filter($users, ...)` dice la intención), ESTÁNDAR (conocidas por todos). Categorías: cadenas, arrays, fechas, matemáticas, archivos, validación. El reflejo: ANTES de escribir un bucle, preguntar « ¿existe una nativa? » y consultar php.net. Reserve su código para su LÓGICA DE NEGOCIO.

Comprueba tu comprensión

¿Cuál es la estructura de datos central de PHP?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 1Preguntas inéditas y más difíciles para validar tus conocimientos