PHP 配列の多次元ソートの進化: 新世代のソート アルゴリズムの探索

WBOY
リリース: 2024-04-29 16:15:01
オリジナル
1133 人が閲覧しました

多次元配列のソート要件を目的として、バブルソート原理に基づいて最適化された新しい多次元ソートアルゴリズムが提案されています。実装手順には次のものが含まれます。ソートされた配列を初期化します。配列要素を順番に走査します。比較関数を呼び出して、隣接する要素を比較します。比較結果が -1 の場合、要素は交換されます。ソートされた配列を返します。

PHP 配列の多次元ソートの進化: 新世代のソート アルゴリズムの探索

PHP 配列の多次元ソートの進化: 新世代のソート アルゴリズムの探索

複数の配列を扱う場合次元配列では、並べ替えが一般的に必要になります。 PHP にはさまざまな並べ替え関数が用意されていますが、複雑な多次元の並べ替えシナリオにはやや不十分です。この記事では、開発者がさまざまなソートのニーズに簡単に対処できるようにする、斬新で効率的な多次元ソート アルゴリズムを紹介します。

新世代のソート アルゴリズム

私たちが提案するソート アルゴリズムはバブル ソートの原理に基づいていますが、多次元配列の処理用に最適化されています。アルゴリズムの鍵は次のとおりです。

function multi维排序($array, $sortingColumns, $sortOrder = SORT_ASC) {
    $sortedArray = $array;
    $columnsCount = count($sortingColumns);

    for ($i = 0; $i < count($sortedArray); $i++) {
        for ($j = $i + 1; $j < count($sortedArray); $j++) {
            $compareResult = compare($sortedArray[$i], $sortedArray[$j], $sortingColumns, $sortOrder);

            if ($compareResult == -1) {
                swap($sortedArray, $i, $j);
            }
        }
    }

    return $sortedArray;
}
ログイン後にコピー

比較関数

function compare($a, $b, $sortingColumns, $sortOrder) {
    foreach ($sortingColumns as $column) {
        if ($a[$column] == $b[$column]) {
            continue;
        }

        if ($sortOrder == SORT_ASC) {
            return $a[$column] < $b[$column] ? 1 : -1;
        } else {
            return $a[$column] > $b[$column] ? 1: -1;
        }
    }

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

実用的なケース

以下は、その方法を示す例です。このアルゴリズムを使用して文字列と数値を含む多次元配列を並べ替えるには:

$array = [
    ['name' => 'John Doe', 'age' => 25],
    ['name' => 'Jane Smith', 'age' => 30],
    ['name' => 'Peter Jones', 'age' => 28]
];

$sortedArray = multi维排序($array, ['age', 'name'], SORT_ASC);

print_r($sortedArray);
ログイン後にコピー

出力:

[
    ['name' => 'John Doe', 'age' => 25],
    ['name' => 'Peter Jones', 'age' => 28],
    ['name' => 'Jane Smith', 'age' => 30]
]
ログイン後にコピー

以上がPHP 配列の多次元ソートの進化: 新世代のソート アルゴリズムの探索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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