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 サイトの他の関連記事を参照してください。