ホームページ >バックエンド開発 >PHPチュートリアル >PHP 配列をサブ配列の「optionNumber」値でソートするにはどうすればよいですか?

PHP 配列をサブ配列の「optionNumber」値でソートするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-08 02:32:09804ブラウズ

How to Sort a PHP Array by a Subarray's

PHP サブ配列値による配列の並べ替え: 総合ガイド

PHP では、配列はデータの整理と操作に不可欠なデータ構造です。場合によっては、これらの配列をサブ配列内の値に基づいて並べ替える必要が生じることがあります。この記事では、配列を部分配列の値で並べ替える最も効果的な方法を検討します。特に、optionNumber フィールドに焦点を当てます。

まず、次の例を考えてみましょう。

$array = [
    [
        "configuration_id" => 10,
        "id" => 1,
        "optionNumber" => 3,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 9,
        "id" => 1,
        "optionNumber" => 2,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 8,
        "id" => 1,
        "optionNumber" => 1,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ]
];

目的は、配列を整理することです。 $array は、optionNumber に基づいて増分順序で作成され、次のような並べ替えられた配列になります。

$sortedArray = [
    [
        "configuration_id" => 8,
        "id" => 1,
        "optionNumber" => 1,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 9,
        "id" => 1,
        "optionNumber" => 2,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 10,
        "id" => 1,
        "optionNumber" => 3,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ]
];

この並べ替えを実現するには、 PHP の usort 関数は効果的なツールであることが証明されています。実装方法は次のとおりです。

function cmp_by_optionNumber($a, $b) {
  return $a["optionNumber"] - $b["optionNumber"];
}

usort($array, "cmp_by_optionNumber");

このメソッドでは、cmp_by_optionNumber は 2 つの入力配列の optionNumber 値を比較するユーザー定義の比較関数です。この関数は、最初の配列の optionNumber が 2 番目の配列より小さい場合は負の値を返し、等しい場合は 0 を返し、最初の配列の optionNumber が 2 番目の配列より大きい場合は正の値を返します。この比較関数を利用することで、usort は、optionNumber フィールドの昇順で $array を効率的にソートします。

PHP バージョン 5.3 以降では、よりクリーンなアプローチのために匿名関数を使用することをお勧めします。

usort($array, function ($a, $b) {
    return $a['optionNumber'] - $b['optionNumber'];
});

ただし、optionNumber 値が文字列の場合、比較関数での減算により誤った結果が生じる可能性があることに注意することが重要です。このような場合は、次のアプローチの使用を検討してください。

usort($array, function ($a, $b) {
    return strcmp($a['optionNumber'], $b['optionNumber']);
});

最後に、PHP バージョン 7.0 以降では、宇宙船オペレーター <=> が使用されます。特に大きな数値を扱う場合に、減算の代わりに利用して、オーバーフロー/切り捨ての問題を防ぐことができます。

usort($array, function ($a, $b) {
    return $a['optionNumber'] <=> $b['optionNumber'];
});

説明されているメソッドの 1 つを実装すると、サブ配列の値に基づいて PHP 配列を効果的に並べ替えることができ、次のことが保証されます。データは意味のある便利な方法で整理されます。

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

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