ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで

PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで

WBOY
リリース: 2024-04-29 21:12:02
オリジナル
849 人が閲覧しました

多次元配列のソートは、単一列のソートとネストされたソートに分類できます。単一列のソートでは、array_multisort() 関数を使用して列ごとにソートできますが、ネストされたソートでは、配列を走査してソートするための再帰関数が必要です。具体的な例としては、製品名による並べ替えや、売上数量や価格による化合物の並べ替えなどがあります。

PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで

#PHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまで

はじめに

PHP では、多次元配列のソートは通常、複雑なタスクです。このチュートリアルでは、単純な単一列の並べ替えから複雑なネストされた並べ替えまで、さまざまなシナリオに基づいて多次元配列を並べ替える方法を段階的に説明します。

単一列の並べ替え

最も単純な多次元配列の並べ替えは、単一列に基づいて並べ替えることです。

array_multisort() 関数を使用できます:

$arr = [
    ['id' => 1, 'name' => 'John Doe'],
    ['id' => 3, 'name' => 'Jane Smith'],
    ['id' => 2, 'name' => 'Bob Johnson'],
];

array_multisort(array_column($arr, 'id'), SORT_ASC, $arr);

print_r($arr);
// 输出:
// Array
// (
//     [0] => Array
//         (
//             [id] => 1
//             [name] => John Doe
//         )
//     [1] => Array
//         (
//             [id] => 2
//             [name] => Bob Johnson
//         )
//     [2] => Array
//         (
//             [id] => 3
//             [name] => Jane Smith
//         )
// )
ログイン後にコピー

ネストされた配列のsort

ネストされた配列の場合、再帰関数を使用して、 array そしてそれらを並べ替えます:

function sortNestedArray($arr, $col, $order) {
    if (!is_array($arr)) {
        return $arr;
    }

    uasort($arr, function($a, $b) use ($col, $order) {
        if ($a[$col] == $b[$col]) {
            return 0;
        }

        return ($a[$col] < $b[$col]) ? -1 : 1;
    });

    foreach ($arr as &$item) {
        if (is_array($item)) {
            $item = sortNestedArray($item, $col, $order);
        }
    }

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

実用的なケース

ケース 1: ネストされた配列を製品名で並べ替えます

$products = [
    ['id' => 1, 'name' => 'Apple', 'price' => 10],
    ['id' => 2, 'name' => 'Orange', 'price' => 15],
    ['id' => 3, 'name' => 'Banana', 'price' => 5],
];

$sortedProducts = sortNestedArray($products, 'name', SORT_ASC);

// ... 处理排序后的数组 ...
ログイン後にコピー

ケース 2: 売上高と価格によるネストされた配列の複合並べ替え

$salesData = [
    ['product' => 'Apple', 'count' => 10, 'price' => 10],
    ['product' => 'Orange', 'count' => 15, 'price' => 15],
    ['product' => 'Banana', 'count' => 5, 'price' => 5],
];

usort($salesData, function($a, $b) {
    if ($a['count'] == $b['count']) {
        return ($a['price'] < $b['price']) ? -1 : 1;
    }

    return ($a['count'] < $b['count']) ? 1 : -1;
});

// ... 处理排序后的数据 ...
ログイン後にコピー

以上がPHP 配列の多次元ソートの実践: 単純なシナリオから複雑なシナリオまでの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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