この質問は、PHP における配列の並べ替えの問題に関する参照を目的としています。あなたの特定のケースはユニークであり、新しい質問に値すると考えるのは簡単ですが、実際には、ほとんどはこのページの解決策の 1 つを少し変更したものにすぎません。
あなたの質問がこの質問の重複としてクローズされた場合は、その質問が以下のすべての質問と大きく異なる理由を説明できる場合にのみ、質問の再開を依頼してください。
PHP で配列をソートするにはどうすればよいですか?
PHP で complex 配列をソートするにはどうすればよいですか?
PHPでオブジェクトの配列をソートするにはどうすればよいですか?
基本的な 1 次元配列が含まれています。多次元配列、オブジェクトの配列。含まれます。ある配列を別の配列に基づいて並べ替える
SPL ソートを使用する
安定したソート
PHP の既存の関数を使用した実際的な答えについては 1 を参照してください。ソート アルゴリズム (PHP 関数が実装しており、非常に複雑な状況で 必要になる可能性があります) に関する学術的な詳細な答えについては 2 を参照してください。
わかりました、deceze では基本的なメソッドのほとんどがカバーされています。他のタイプの並べ替えについても見ていきます
SPL ソートを使用する
リーリー ###出力### リーリーSplHeap
SplMaxHeap
リーリーSplMaxHeap クラスは、最大値を先頭に維持するヒープの主要な機能を提供します。
SplMinHeap
###バブルソート###リーリー その他の種類の並べ替え
バブルソートに関する
Wikipedia 記事からの抜粋: リーリー並べ替えを選択 選択ソートに関する
Wikipedia 記事からの抜粋: リーリー挿入ソート 挿入ソートに関する
Wikipedia 記事からの抜粋: リーリーヒルソート シェルソートに関する
Wikipedia 記事からの抜粋: リーリーコームソート コームソートに関する
Wikipedia 記事からの抜粋: リーリー並べ替えを結合 マージソートに関する
Wikipedia 記事より: リーリークイックソート クイックソートに関する
Wikipedia 記事からの抜粋: リーリー並べ替えの手配 並べ替えに関する
Wikipedia 記事からの抜粋: リーリー基数ソート 基数ソートに関する
Wikipedia 記事からの抜粋: リーリー基本的な 1 次元配列
リーリー適用可能な並べ替え関数:
######選別###### ######選別###### ######分類###### ######選別######
-
」関数)、低位から高位にソートするか逆順にソートするか (「- r
")、および値を比較する方法 ("- nat
概要と詳細を確認するためのリンク。-
各エントリのキー「foo」で
$arrayナットソート
natcasesort
ksort
krsort
それらの唯一の違いは、キーと値の関連付けを保持するかどうか (「
a」) です。 >" )、値またはキーをソートするかどうか ("
k" と通常)。
http を参照してください。 ://php.net /manual/en/array.sorting.phpオブジェクト配列を含む多次元配列
リーリーを並べ替える場合は、
これを行うには、 比較関数 を作成する必要があります。この関数は 2 つの要素を受け入れ、要素が等しいとみなされる場合は
0カスタム比較関数
が必要になります。上記のsort
および関連関数は、比較と並べ替えの方法がわかっている単純な値に対して適切に機能します。 PHP は、array('foo' => 'bar', 'baz' => 42); のような複雑な値
をどう処理するかを単に「知っている」わけではないので、それを伝える必要があります。を返す必要があります。最初の値が小さい場合は
0より小さい値を返す必要があります。最初の値が等しいとみなされる場合は
を使用する必要があります。メソッドまたは静的メソッドを使用する場合は、0
より小さい値を返す必要があります。等しい 0 より小さい値は、最初の値の方が大きい場合、0より大きい値を返さなければなりません。これが必要なものです:
リーリー 通常、コールバックとして 匿名関数PHP でコールバックを指定するその他の方法を参照してください。
これで、次のいずれかの関数を使用できるようになります:
usort
uasort
リーリー
usortcmp()
は、array('foo' => 'bar', 'baz' => 42)$a
の形式で呼び出します。 $bを別の
array('foo' => ..., 'baz' => ...)として使用します。次に、関数は
usort
どちらの値が大きいか、またはそれらが等しいかどうかを返します。usort
配列がソートされるまで、$a
と$b
に異なる値を渡して、このプロセスを繰り返します。cmp
関数は複数回呼び出されます。少なくとも
$arrayにある値と同じ数、および
値のさまざまな組み合わせが呼び出されます。各タイムコードは >$aおよび
$bです。
このアイデアに慣れるには、次のことを試してください:
リーリー必要なのは、2 つの項目を比較するカスタム方法を定義することだけです。これはさまざまな値に適用できます。
ところで、これは任意の値で機能します。複雑な配列である必要はありません。カスタム比較を行う場合は、単純な数値配列を比較することもできます。
sort
参照による並べ替えでは、有用なものは何も返されません。配列 はインプレースでソートされるので、戻り値を何かに割り当てる必要がないことに注意してください。 $array = sort($array)
カスタム番号の比較は、並べ替えられた配列ではなく、配列を
trueに置き換えます。
sort($array);だけです。
baz
数学の力で並べ替える場合、必要なのは次のとおりです:
リーリーのおかげで、$a が $b# より小さいか、等しいか、大きいかに応じて、値
値では機能しないことに注意してください。値は0 が返されます。 ##.
これは、
floatint
比較関数では、関数の呼び出しを含め、必要なことはすべて実行できます。に単純化され、精度が失われます。代わりに、明示的な
-1、
0、および
1戻り値を使用してください。
###物体###オブジェクトの配列がある場合も、同じように動作します。
リーリー ###関数###リーリー ###弦###
最初の文字列比較バージョンのショートカット:リーリー
strcmp
は、cmp
で予期されることを正確に実行し、-1
、0
、または1## を返します。 #.
宇宙船オペレーター
PHP 7 では、
でソートしたいが、2 つの要素のspaceship 演算子
が導入され、タイプ間での等しい/より小さい/より大きい比較を統合および簡素化します。 リーリー複数のフィールドで並べ替える
主に
foofoo
が等しい場合は、baz でソートします。 リーリー 詳しい方のために説明すると、これは p>ORDER BY foo, baz
を使用した SQL クエリと同等です。
この非常に簡潔な短縮版
要素を「手動順序」に並べ替える場合、例:および
任意の数のキーに対してこのような比較関数を動的に作成する方法も参照してください。
手動の静的順序で並べ替えます
"foo"、"bar"、"baz"
:
リーリー上記のすべてと同様、PHP 5.3 以降を使用している場合 (実際にそうすべきです)、匿名関数を使用してコードを短縮し、別のグローバル関数を避けてください。 リーリー これは、複雑な多次元配列を並べ替える簡単な方法です。繰り返しになりますが、2 つの項目のうちどちらが「大きい」かを判断する方法を PHP に教えます; PHP に実際の並べ替えを実行させます。
さらに、上記のすべてについて、昇順と降順を切り替えるには、
$aパラメータと $b パラメータを交換するだけです。例えば:### リーリー
別の配列に基づいて配列を並べ替える独特の
array_multisort もあり、これを使用すると、次の条件に基づいて配列を並べ替えることができます。 別の要素:
リーリーここで期待される結果は次のとおりです:
リーリーリーリー
array_multisort
を使用してそこに到達します:PHP 5.5.0 以降では、
array_columnを使用して多次元配列から列を抽出し、その列で配列を並べ替えることができます。 リーリー
複数の列をどちらかの方向に並べ替えることもできます:
リーリー PHP 7.0.0 以降では、オブジェクトの配列からプロパティを抽出することもできます。