Доверьте продвижение нам

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

от 1 499 098 

PHP сортировка массива по массиву

Views Icon1

PHP: Сортировка массива по массиву

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

Основные понятия о массиве

Массивы в PHP — это структуры данных, которые могут содержать несколько значений под одним именем. Они могут быть как индексированными (с числовыми ключами), так и ассоциативными (с текстовыми ключами). С целью демонстрации мы будем использовать индексированные массивы, однако описанные методики также применимы и для ассоциативных массивов.

Пример массива, который мы будем использовать в нашей статье:

$items = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
$order = [3, 1, 4, 0, 2];

В этом примере массив $items содержит фрукты, а массив $order определяет новый порядок индексов, по которому мы хотим отсортировать массив $items.

Сортировка массива с помощью пользовательской функции

Для начала мы можем воспользоваться функцией usort, которая позволяет задавать собственную логику сортировки. Мы создадим функцию-сравнитель, которая будет использовать массив $order для определения порядка элементов.

function sortByOrder($items, $order) {
    // Создание ассоциативного массива для сопоставления значений индексов
    $orderMap = array_flip($order);

    usort($items, function($a, $b) use ($orderMap) {
        return $orderMap[array_search($a, $items)] <=> $orderMap[array_search($b, $items)];
    });

    return $items;
}

$sortedItems = sortByOrder($items, $order);
print_r($sortedItems);

В данном коде мы создаём ассоциативный массив с индексами на основе массива $order, а затем используем его для сортировки.

Сортировка на основе ключей

В случае, если у нас есть массив, который представляет собой ассоциативный массив, смена порядка значений будет немного отличаться. Предположим, у нас есть следующий ассоциативный массив:

$items = [
    "apple" => 3,
    "banana" => 1,
    "orange" => 2,
    "grape" => 4,
    "kiwi" => 5
];

$order = ["grape", "banana", "orange", "apple", "kiwi"];

Теперь мы хотим отсортировать массив $items по порядку, заданному в массиве $order.

function sortAssociativeByOrder($items, $order) {
    // Создаём массив, который будет темпорально хранить нужные элементы
    $sortedItems = [];

    foreach ($order as $key) {
        if (isset($items[$key])) {
            $sortedItems[$key] = $items[$key];
        }
    }

    return $sortedItems;
}

$sortedAssociativeItems = sortAssociativeByOrder($items, $order);
print_r($sortedAssociativeItems);

Этот код проходит по каждому элементу в массиве $order, добавляя соответствующие элементы из массива $items в новый массив $sortedItems.

Использование функцией array_map и array_flip

Иногда мы также можем использовать комбинированные функции, такие как array_map и array_flip, для достижения нужного результата более лаконичным способом. Вот как это можно сделать:

$items = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
$order = [3, 1, 4, 0, 2];

$orderedItems = array_map(function($index) use ($items) {
    return $items[$index];
}, $order);

print_r($orderedItems);

Заключение

Сортировка массива по массиву в PHP — это важная задача, которую можно решить различными способами. Выбор метода зависит от конкретных требований к коду и структуры данных. Мы рассмотрели основные подходы, включая использование функций usort, array_map и создание пользовательских функций. С помощью этих методов вы можете эффективно организовывать данные и улучшать работу ваших приложений на PHP.

Поделиться:

Задать вопрос

Оставляя заявку, вы соглашаетесь с политикой обработки персональных данных.

Оставить заявку

Оставляя заявку, вы соглашаетесь с политикой обработки персональных данных.