Структуры данных в PHP

Структуры данных в PHP: Полный разбор

Введение

Структуры данных – это основа эффективного программирования. В PHP для организации и управления данными можно использовать массивы, объекты, очереди, стеки, кучи и другие структуры. В этом блоге разберем, какие структуры данных доступны в PHP, их примеры и области применения.


1. Массивы (Arrays)

В PHP массивы являются наиболее используемой структурой данных. Они могут быть:

  • Индексированными (числовые ключи)
  • Ассоциативными (ключи – строки)
  • Многомерными (массивы внутри массивов)

Пример индексированного массива

$numbers = [1, 2, 3, 4, 5];
echo $numbers[2]; // 3

Ассоциативный массив

$user = [
    'name' => 'Орхан',
    'age' => 26,
    'role' => 'developer'
];
echo $user['name']; // Орхан

Многомерный массив

$users = [
    ['name' => 'Орхан', 'age' => 26],
    ['name' => 'Мурад', 'age' => 30]
];
echo $users[1]['name']; // Мурад

2. Объекты (Objects)

В PHP можно использовать объектно-ориентированное программирование (ООП) для представления сложных данных.

class User {
    public $name;
    public $age;
    
    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$user = new User("Орхан", 26);
echo $user->name; // Орхан

3. SplDoublyLinkedList (Двусвязный список)

PHP предлагает двусвязные списки через SPL (Standard PHP Library).

$list = new SplDoublyLinkedList();
$list->push("PHP");
$list->push("Go");
$list->push("Laravel");

$list->rewind();
echo $list->current(); // PHP

4. SplStack (Стек - LIFO)

Стек – это структура данных, работающая по принципу "последний пришел – первый вышел" (LIFO).

$stack = new SplStack();
$stack->push("PHP");
$stack->push("Go");
echo $stack->pop(); // Go

5. SplQueue (Очередь - FIFO)

Очередь – это структура, где элементы извлекаются в порядке их добавления (FIFO).

$queue = new SplQueue();
$queue->enqueue("PHP");
$queue->enqueue("Go");
echo $queue->dequeue(); // PHP

6. SplHeap (Куча)

Куча – это структура, которая автоматически поддерживает упорядоченность элементов. В PHP есть минимальная куча (SplMinHeap) и максимальная куча (SplMaxHeap).

Пример SplMinHeap (минимальная куча)

$heap = new SplMinHeap();
$heap->insert(3);
$heap->insert(1);
$heap->insert(4);
$heap->insert(2);

while (!$heap->isEmpty()) {
    echo $heap->extract() . "\n"; // 1, 2, 3, 4
}

Пример SplMaxHeap (максимальная куча)

$heap = new SplMaxHeap();
$heap->insert(3);
$heap->insert(1);
$heap->insert(4);
$heap->insert(2);

while (!$heap->isEmpty()) {
    echo $heap->extract() . "\n"; // 4, 3, 2, 1
}

Кастомная куча для приоритетных задач

class TaskHeap extends SplHeap {
    protected function compare($task1, $task2) {
        return $task2['priority'] - $task1['priority'];
    }
}

$tasks = new TaskHeap();
$tasks->insert(['task' => 'Fix bug', 'priority' => 2]);
$tasks->insert(['task' => 'Write docs', 'priority' => 3]);
$tasks->insert(['task' => 'Deploy app', 'priority' => 1]);

while (!$tasks->isEmpty()) {
    $task = $tasks->extract();
    echo "Task: {$task['task']} (Priority: {$task['priority']})\n";
}

7. SplFixedArray (Фиксированный массив)

Эта структура экономит память, так как массив фиксированного размера.

$array = new SplFixedArray(3);
$array[0] = "PHP";
$array[1] = "Go";
$array[2] = "Laravel";

echo $array[1]; // Go

Полезные ссылки


Заключение

В PHP есть множество структур данных, которые позволяют эффективно управлять информацией:

  • Массивы – универсальны, но не всегда оптимальны.
  • Объекты – удобны для работы с данными в ООП.
  • SplDoublyLinkedList, SplStack, SplQueue – подходят для работы с последовательностями данных.
  • SplHeap – эффективна для приоритетных очередей.
  • SplFixedArray – экономит память по сравнению с обычными массивами.

Выбор структуры данных зависит от задачи. Если вам нужно быстрое извлечение минимального или максимального значения – используйте SplHeap. Если важен порядок поступления элементов – SplQueue. Для работы с динамическими списками – SplDoublyLinkedList.

Какую из этих структур ты используешь чаще всего? Делись в комментариях! 🚀

Recent blogs
Структурные паттерны в программировании

Структурные паттерны в программировании

Порождающие паттерны в программировании

Порождающие паттерны в программировании

Генераторы и итераторы в PHP

Генераторы и итераторы в PHP

Объектно-ориентированное программирование в PHP

Объектно-ориентированное программирование в PHP

HTTP-методы

HTTP-методы