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

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Algoritmos y estructuras de datos en PHP: en la práctica

\n\n

En el mundo del desarrollo web, PHP sigue siendo uno de los lenguajes más populares. Sin embargo, muchos desarrolladores familiarizados con la sintaxis suelen pasar por alto conceptos fundamentales: los algoritmos y las estructuras de datos. Comprender estos temas no solo mejora la calidad del código, sino que también te hace un profesional más competitivo en las entrevistas. En este artículo, analizaremos los algoritmos y estructuras de datos clave en PHP con ejemplos de código reales que podrás aplicar de inmediato en tus proyectos.

\n\n

1. Estructuras de datos básicas: pila y cola

\n\n

La pila y la cola son estructuras de datos lineales que se utilizan con frecuencia en aplicaciones reales. La pila funciona bajo el principio LIFO (Last In, First Out), mientras que la cola sigue el principio FIFO (First In, First Out). En PHP, se pueden implementar utilizando funciones integradas de arrays.

\n\n

Implementación de una pila

\n
<?php\nclass Stack {\n    private $stack = [];\n\n    public function push($item) {\n        array_push($this->stack, $item);\n    }\n\n    public function pop() {\n        if ($this->isEmpty()) {\n            return null;\n        }\n        return array_pop($this->stack);\n    }\n\n    public function peek() {\n        return end($this->stack);\n    }\n\n    public function isEmpty() {\n        return empty($this->stack);\n    }\n}\n\n// Ejemplo de uso\n$stack = new Stack();\n$stack->push("Primero");\n$stack->push("Segundo");\n$stack->push("Tercero");\necho $stack->pop(); // Tercero\necho $stack->peek(); // Segundo\n?>
\n\n

Implementación de una cola

\n
<?php\nclass Queue {\n    private $queue = [];\n\n    public function enqueue($item) {\n        array_push($this->queue, $item);\n    }\n\n    public function dequeue() {\n        if ($this->isEmpty()) {\n            return null;\n        }\n        return array_shift($this->queue);\n    }\n\n    public function front() {\n        return reset($this->queue);\n    }\n\n    public function isEmpty() {\n        return empty($this->queue);\n    }\n}\n\n// Ejemplo de uso\n$queue = new Queue();\n$queue->enqueue("Primero");\n$queue->enqueue("Segundo");\n$queue->enqueue("Tercero");\necho $queue->dequeue(); // Primero\necho $queue->front();    // Segundo\n?>
\n\n

Estas estructuras de datos son indispensables para implementar búferes, historial de acciones (deshacer/rehacer) y procesamiento de tareas en orden de llegada.

\n\n

2. Algoritmos de ordenamiento en PHP

\n\n

El ordenamiento es una de las operaciones más comunes en programación. Veamos dos implementaciones clásicas: el ordenamiento de burbuja (para aprendizaje) y el ordenamiento rápido (para uso real).

\n\n

Ordenamiento de burbuja (Bubble Sort)

\n
<?php\nfunction bubbleSort(&$arr) {\n    $n = count($arr);\n    for ($i = 0; $i < $n - 1; $i++) {\n        for ($j = 0; $j < $n - $i - 1; $j++) {\n            if ($arr[$j] > $arr[$j + 1]) {\n                // Intercambio de valores\n                $temp = $arr[$j];\n                $arr[$j] = $arr[$j + 1];\n                $arr[$j + 1] = $temp;\n            }\n        }\n    }\n}\n\n$numbers = [64, 34, 25, 12, 22, 11, 90];\nbubbleSort($numbers);\nprint_r($numbers); // [11, 12, 22, 25, 34, 64, 90]\n?>
\n\n

Complejidad: O(n²) — no es adecuado para arrays grandes, pero demuestra perfectamente el principio.

\n\n

Ordenamiento rápido (Quick Sort)

\n
<?php\nfunction quickSort($arr) {\n    if (count($arr) < 2) {\n        return $arr;\n    }\n\n    $pivot = $arr[0];\n    $left = $right = [];\n\n    for ($i = 1; $i < count($arr); $i++) {\n        if ($arr[$i] < $pivot) {\n            $left[] = $arr[$i];\n        } else {\n            $right[] = $arr[$i];\n        }\n    }\n\n    return array_merge(quickSort($left), [$pivot], quickSort($right));\n}\n\n$numbers = [3, 6, 8, 10, 1, 2, 1];\n$sorted = quickSort($numbers);\nprint_r($sorted); // [1, 1, 2, 3, 6, 8, 10]\n?>                

Blogs

Book Recommendations