ホームページ > バックエンド開発 > PHPチュートリアル > 柔軟で再利用可能な関数を使用して PHP で多次元配列を並べ替える方法

柔軟で再利用可能な関数を使用して PHP で多次元配列を並べ替える方法

Patricia Arquette
リリース: 2025-01-01 07:29:09
オリジナル
451 人が閲覧しました

How to Sort Multidimensional Arrays in PHP Using a Flexible and Reusable Function?

PHP で多次元配列をソートする方法

PHP 5.3 の一般化されたソリューションの紹介

実装:

function make_comparer() {
    // Normalize criteria up front
    $criteria = func_get_args();
    foreach ($criteria as $index => $criterion) {
        $criteria[$index] = is_array($criterion)
            ? array_pad($criterion, 3, null)
            : array($criterion, SORT_ASC, null);
    }

    return function($first, $second) use (&$criteria) {
        foreach ($criteria as $criterion) {
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

            if ($projection) {
                $lhs = call_user_func($projection, $first[$column]);
                $rhs = call_user_func($projection, $second[$column]);
            } else {
                $lhs = $first[$column];
                $rhs = $second[$column];
            }

            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            } elseif ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        return 0; // tiebreakers exhausted
    };
}
ログイン後にコピー

高度な機能:

(1) 複数のソート列:

usort($data, make_comparer('number', 'name'));
ログイン後にコピー

(2) 逆順並べ替え:

usort($data, make_comparer(['name', SORT_DESC]));
ログイン後にコピー

(3) カスタム投影:

usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));
ログイン後にコピー

(4) 結合特徴:

usort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));
ログイン後にコピー

利点:

  • 再利用可能
  • Fl拡張可能
  • 可逆
  • 拡張可能
  • 結合可能

以上が柔軟で再利用可能な関数を使用して PHP で多次元配列を並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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