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

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

Linda Hamilton
リリース: 2024-12-07 05:42:14
オリジナル
846 人が閲覧しました

How Can I Sort a Multidimensional PHP Array by a Subarray's Value?

PHP でのサブ配列値による配列の並べ替え

データ構造の順序付けは一般的なプログラミング タスクであり、配列は保存と管理に頻繁に使用されます。情報のコレクション。 PHP では、値としての配列を含め、配列にネストされた構造を含めることができます。多次元配列の並べ替えは、データの整理や特定の要素の抽出など、さまざまな理由で役立ちます。

問題ステートメント:

次の配列構造を考えてみましょう:

$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'
    ],
];
ログイン後にコピー

目標は、「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 関数を利用できます。 usort は 2 つの引数を取ります。ソートされる配列と、要素の順序を決定する比較関数です。比較関数は、最初の要素が 2 番目の要素の前に来る必要がある場合は負の値を返し、それらが等しい場合は 0 を返し、最初の要素が 2 番目の要素の後に来る必要がある場合は正の値を返します。

この場合、比較は関数は次のように定義できます:

function cmp_by_optionNumber($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
}
ログイン後にコピー

この関数は、最初の配列の 'optionNumber' 値を 2 番目の配列から減算し、最初の要素が 2 番目の要素より前に来る必要がある場合は負の値になります。それらが等しい場合はゼロの値、最初の要素が 2 番目の要素の後に来る必要がある場合は正の値です。

この比較関数を usort で使用するには、それを 2 番目の引数として渡すだけです:

usort($array, 'cmp_by_optionNumber');
ログイン後にコピー

これにより、配列がその場でソートされ、ソートされた順序を反映するように元の $array 変数が変更されます。結果の $array 変数は、前に示した $sortedArray の例と同じになります。

代替構文:

PHP バージョン 5.3 以降では、匿名関数を使用できます。名前付き比較関数の代わりに:

usort($array, function ($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
});
ログイン後にコピー

PHP 7.0 および上:

PHP バージョン 7.0 以降では、宇宙船オペレーター <=>比較関数で減算の代わりに使用すると、オーバーフロー/切り捨ての問題を防ぐことができます:

usort($array, function ($a, $b) {
  return $a['optionNumber'] <=> $b['optionNumber'];
});
ログイン後にコピー

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

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