ホームページ >バックエンド開発 >PHPチュートリアル >PHP で多次元配列を効率的にソートするにはどうすればよいですか?

PHP で多次元配列を効率的にソートするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-22 02:30:17816ブラウズ

How Can I Efficiently Sort Multidimensional Arrays in PHP?

PHP での多次元配列のソート: 多用途のソリューション

この包括的なガイドでは、PHP で多次元配列をソートするタスクについて説明します。これは、データを簡単に並べ替えることができる、再利用可能で高度にカスタマイズ可能なソリューションを提供します。

ソリューション: make_comparer() 関数

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) {
            // Determine sort criteria
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

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

            // Compare values; do not return if equal
            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            } elseif ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        return 0; // tiebreakers exhausted, so $first == $second
    };
}

使用方法

基本的な使い方: 単一列による並べ替え

// Sort $data by the "name" column using uasort
$data = array(
    array('zz', 'name' => 'Jack', 'number' => 22, 'birthday' => '12/03/1980'),
    array('xx', 'name' => 'Adam', 'number' => 16, 'birthday' => '01/12/1979'),
    array('aa', 'name' => 'Paul', 'number' => 16, 'birthday' => '03/11/1987'),
    array('cc', 'name' => 'Helen', 'number' => 44, 'birthday' => '24/06/1967'),
);
uasort($data, make_comparer('name'));

並べ替え複数の列:

// Sort $data by "number" and then by the zero-indexed column (ID)
uasort($data, make_comparer('number', 0));

高度な機能

逆順並べ替え:

// Sort $data by "name" descending
uasort($data, make_comparer(['name', SORT_DESC]));

カスタム投影:

// Sort $data by "birthday" using date_create as a projection
uasort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));

結合特徴:

// Sort $data by "number" descending and then by "birthday" ascending
uasort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));

結論

このソリューションは、PHP で多次元配列をソートするための幅広い機能を提供します。その柔軟性と使いやすさにより、さまざまなシナリオでのデータ操作のための強力なツールとなります。

以上がPHP で多次元配列を効率的にソートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。