ホームページ > バックエンド開発 > PHPチュートリアル > Laravelコレクションのカスタムキーソート

Laravelコレクションのカスタムキーソート

百草
リリース: 2025-03-10 11:21:12
オリジナル
955 人が閲覧しました

Custom Key Sorting in Laravel Collections

LaravelのsortKeysUsingメソッドは、設定されたキーのソート方法をきれいに制御し、標準のアルファベット順にカスタムソートロジックを実装できるようにします。

この機能は、構成ファイル配列を処理する場合、特定の表示順序を備えたフィールドを形成する場合、またはキーシーケンスが処理または表示に重要な関連データの場合、特に価値があります。

$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;
    }
}
ログイン後にコピー
メソッドは、コレクションデータの配置方法を変更し、アプリケーションの特定のニーズに応じて意味的にソートすることができます。

以上がLaravelコレクションのカスタムキーソートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート