Tecnología que te entiende
Algoritmos y estructuras de datos en PHP: guía práctica
Programación

Algoritmos y estructuras de datos en PHP: guía práctica

25 May 2026 2 min de lectura 820 vistas

Los algoritmos y estructuras de datos son los cimientos de la programación. No importa qué lenguaje uses — entender cómo ordenar eficientemente, buscar en millones de registros o gestionar memoria es lo que separa a un programador de un gran programador.

¿Por qué importa la eficiencia?

Un algoritmo que tarda 1 segundo en ordenar 1,000 elementos puede tardar 16 minutos en ordenar 1,000,000 — si su complejidad es O(n²). Otro algoritmo con complejidad O(n log n) haría lo mismo en 20 segundos. A escala real, esta diferencia es entre una aplicación funcional y una inutilizable.

Notación Big O

Notación Nombre Ejemplo
O(1) Constante Acceder a un elemento de un array por índice
O(log n) Logarítmica Búsqueda binaria
O(n) Lineal Buscar en un array no ordenado
O(n log n) Lineal-logarítmica Merge sort, Quick sort
O(n²) Cuadrática Bubble sort, bucles anidados

Estructuras de datos fundamentales

Array / Lista

// PHP — arrays son dinámicos y admiten tipos mixtos
$ips = ['192.168.1.1', '10.0.0.1', '172.16.0.1'];
$ips[] = '8.8.8.8';           // O(1) agregar al final
$primera = $ips[0];            // O(1) acceso por índice
array_splice($ips, 1, 0, ['192.168.1.2']);  // O(n) insertar en medio

Stack (pila) — LIFO

// Útil para: historial de navegación, eval de expresiones, backtracking
$stack = new SplStack();
$stack->push('inicio.php');    // push O(1)
$stack->push('articulos.php');
$stack->push('articulo-1.php');

$actual = $stack->top();       // peek: 'articulo-1.php'
$anterior = $stack->pop();     // pop O(1): regresa y saca 'articulo-1.php'

Queue (cola) — FIFO

// Útil para: colas de tareas, impresión, procesos batch
$queue = new SplQueue();
$queue->enqueue('enviar-email-1');  // O(1)
$queue->enqueue('enviar-email-2');
$queue->enqueue('enviar-email-3');

$tarea = $queue->dequeue();   // O(1): saca 'enviar-email-1'

Hash Table / Diccionario

// PHP arrays asociativos son hash tables
$usuarios = [
    'paquito' => ['email' => 'p@ej.com', 'rol' => 'admin'],
    'ana'     => ['email' => 'a@ej.com', 'rol' => 'editor'],
];

$rol = $usuarios['paquito']['rol'];  // O(1) — mucho más rápido que buscar en array

Algoritmos de ordenamiento

// Bubble Sort — simple pero O(n²), solo para aprender
function bubbleSort(array $arr): array {
    $n = count($arr);
    for ($i = 0; $i < $n - 1; $i++) {
        for ($j = 0; $j < $n - $i - 1; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                [$arr[$j], $arr[$j + 1]] = [$arr[$j + 1], $arr[$j]];
            }
        }
    }
    return $arr;
}

// En PHP, usa sort() nativo — implementa Timsort (O(n log n))
$nums = [64, 34, 25, 12, 22, 11, 90];
sort($nums);
print_r($nums);  // [11, 12, 22, 25, 34, 64, 90]

Búsqueda binaria

// Requiere array ORDENADO. O(log n) vs O(n) de búsqueda lineal
function busquedaBinaria(array $arr, int $target): int {
    $izq = 0;
    $der = count($arr) - 1;

    while ($izq <= $der) {
        $mid = intdiv($izq + $der, 2);

        if ($arr[$mid] === $target) return $mid;
        if ($arr[$mid] < $target)   $izq = $mid + 1;
        else                         $der = $mid - 1;
    }
    return -1;  // no encontrado
}

$ips_ordenadas = [100, 110, 120, 130, 140, 150];
echo busquedaBinaria($ips_ordenadas, 130);  // índice 3
✅ Cuándo importa la estructura de datos: Array cuando accedes por índice · Hash cuando buscas por clave · Stack para historial/deshacer · Queue para procesamiento secuencial · Si ordenas, usa el sort del lenguaje (está optimizado) · Para búsqueda frecuente, ordena primero y usa búsqueda binaria.
"Escribir código que funciona es el primer nivel. Escribir código que escala es el segundo. Los algoritmos son el puente entre ambos."