Сортування колекцій Laravel за власними ключами

1
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 грудня, 2025
Ви хочете дізнатися, як покращити управління даними у вашому Laravel-додатку? У нашій статті ми розглядаємо метод sortKeysUsing, який дозволяє налаштувати порядок ключів колекцій для досягнення максимальної зручності та логічності в обробці даних

Метод sortKeysUsing у Laravel дозволяє детально контролювати порядок ключів колекцій, що дає змогу реалізувати кастомну логіку сортування, виходячи за межі стандартного алфавітного порядку

Ця функція особливо корисна при роботі з масивами конфігурацій, формами з визначеними порядками відображення тощо, коли послідовність ключів важлива для обробки чи відображення

$collection->sortKeysUsing('strnatcasecmp');
 
// або
 
$collection->sortKeysUsing(function ($a, $b) {
    return $a <=> $b;
});

Ось приклад реалізації пріоритетного порядку меню:

<?php
 
namespace App\Services;
 
use Illuminate\Support\Collection;
 
class NavigationManager
{
    public function getOrderedNavigation(array $menuItems): Collection
    {
        return collect($menuItems)
            ->sortKeysUsing(function ($a, $b) {
                // Витягуємо префікси позицій (pos1_, pos2_ тощо)
                $positionA = $this->extractPosition($a);
                $positionB = $this->extractPosition($b);
 
                // Якщо обидва мають префікси, сортуємо за числовим значенням
                if ($positionA !== null && $positionB !== null) {
                    return $positionA <=> $positionB;
                }
 
                // Префікси позицій йдуть перед ключами без префіксів
                if ($positionA !== null) return -1;
                if ($positionB !== null) return 1;
 
                // Групуємо елементи за секцією
                $sectionA = explode('_', $a)[0];
                $sectionB = explode('_', $b)[0];
 
                if ($sectionA !== $sectionB) {
                    // Користувацький порядок секцій
                    $sections = ['dashboard', 'users', 'content', 'settings'];
                    $indexA = array_search($sectionA, $sections);
                    $indexB = array_search($sectionB, $sections);
 
                    if ($indexA !== false && $indexB !== false) {
                        return $indexA <=> $indexB;
                    }
                }
 
                // За замовчуванням сортуємо в природному, нечутливому до регістру порядку
                return strnatcasecmp($a, $b);
            });
    }
 
    private function extractPosition(string $key): ?int
    {
        if (preg_match('/^pos(\d+)_/', $key, $matches)) {
            return (int) $matches[1];
        }
 
        return null;
    }
}

Метод sortKeysUsing змінює порядок упорядкування даних колекції, що дозволяє встановлювати семантичний порядок відповідно до специфічних вимог вашого застосунку

Популярні

Logomark Logotype

4 поширені помилки Vite у Laravel

Використання Vite для створення фронтенд-ресурсів у вашому додатку Laravel може бути захоплюючим, але іноді ви можете стикнутися з певними помилками. У цій статті ми розглянемо чотири поширені помилки, з якими ви можете зіткнутися, а також підкажемо способи їх усунення, щоб ви могли знову зосередитися на розробці вашого додатку

Logomark Logotype

Інтеграція Laravel Socialite з бібліотекою Google Client PHP

Ви хочете навчитися, як інтегрувати Google OAuth у вашому проекті Laravel, використовуючи Socialite? Дізнайтеся, як налаштувати доступ до сервісів Google, таких як Календар, у нашій сьогоднішній статті

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом