ホームページ  >  に質問  >  本文

PHPで配列とデータをソートするにはどうすればよいですか?

この質問は、PHP における配列の並べ替えの問題に関する参照を目的としています。あなたの特定のケースはユニークであり、新しい質問に値すると考えるのは簡単ですが、実際には、ほとんどはこのページの解決策の 1 つを少し変更したものにすぎません。

あなたの質問がこの質問の重複としてクローズされた場合は、その質問が以下のすべての質問と大きく異なる理由を説明できる場合にのみ、質問の再開を依頼してください。

PHP で配列をソートするにはどうすればよいですか?

PHP で complex 配列をソートするにはどうすればよいですか?

PHPでオブジェクトの配列をソートするにはどうすればよいですか?


  1. 基本的な 1 次元配列が含まれています。多次元配列、オブジェクトの配列。含まれます。ある配列を別の配列に基づいて並べ替える

  2. SPL ソートを使用する

  3. 安定したソート

PHP の既存の関数を使用した実際的な答えについては 1 を参照してください。ソート アルゴリズム (PHP 関数が実装しており、非常に複雑な状況で 必要になる可能性があります) に関する学術的な詳細な答えについては 2 を参照してください。

P粉068174996P粉068174996338日前543

全員に返信(2)返信します

  • P粉476475551

    P粉4764755512023-10-18 13:03:18

    わかりました、deceze では基本的なメソッドのほとんどがカバーされています。他のタイプの並べ替えについても見ていきます

    SPL ソートを使用する

    SplHeap

    リーリー ###出力### リーリー

    SplMaxHeap SplMaxHeap クラスは、最大値を先頭に維持するヒープの主要な機能を提供します。

    リーリー

    SplMinHeap リーリー その他の種類の並べ替え

    ###バブルソート###

    バブルソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    並べ替えを選択 選択ソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    挿入ソート 挿入ソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    ヒルソート シェルソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    コームソート コームソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    並べ替えを結合 マージソートに関する

    Wikipedia 記事より:

    リーリー

    クイックソート クイックソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    並べ替えの手配 並べ替えに関する

    Wikipedia 記事からの抜粋:

    リーリー

    基数ソート 基数ソートに関する

    Wikipedia 記事からの抜粋:

    リーリー

    返事
    0
  • P粉952365143

    P粉9523651432023-10-18 09:01:08

    基本的な 1 次元配列

    リーリー

    適用可能な並べ替え関数:

      ######選別###### ######選別###### ######分類###### ######選別######
    • ナットソート
    • natcasesort
    • ksort
    • krsort
    • それらの唯一の違いは、キーと値の関連付けを保持するかどうか (「a
    • 」関数)、低位から高位にソートするか逆順にソートするか (「
    • r」) です。 >" )、値またはキーをソートするかどうか ("k
    • ")、および値を比較する方法 ("
    • nat" と通常)。 http を参照してください。 ://php.net /manual/en/array.sorting.php
    • 概要と詳細を確認するためのリンク。
    • オブジェクト配列を含む多次元配列 リーリー
    • 各エントリのキー「foo」で
    $array

    を並べ替える場合は、 カスタム比較関数 が必要になります。上記の sort および関連関数は、比較と並べ替えの方法がわかっている単純な値に対して適切に機能します。 PHP は、array('foo' => 'bar', 'baz' => 42); のような 複雑な値 をどう処理するかを単に「知っている」わけではないので、それを伝える必要があります。 これを行うには、 比較関数 を作成する必要があります。この関数は 2 つの要素を受け入れ、要素が等しいとみなされる場合は

    0

    を返す必要があります。最初の値が小さい場合は

    0

    より小さい値を返す必要があります。最初の値が等しいとみなされる場合は 0 より小さい値を返す必要があります。等しい 0 より小さい値は、最初の値の方が大きい場合、0 より大きい値を返さなければなりません。これが必要なものです: リーリー 通常、コールバックとして 匿名関数

    を使用する必要があります。メソッドまたは静的メソッドを使用する場合は、

    PHP でコールバックを指定するその他の方法を参照してください。 これで、次のいずれかの関数を使用できるようになります: usort

    uasort

    • uksort
    • 繰り返しになりますが、キーと値の関連付けが保持されるかどうか、および値またはキーで並べ替えられるかどうかが異なるだけです。詳細については、ドキュメントを参照してください。
    • 使用例: リーリー usort
    • は配列から 2 つの項目を取得し、それらを使用して
    • cmp 関数を呼び出します。したがって、cmp() は、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 が < 0、0 或 >$b# より小さいか、等しいか、大きいかに応じて、値 0 が返されます。 ##. これは、float

    値では機能しないことに注意してください。値は

    int に単純化され、精度が失われます。代わりに、明示的な -10、および 1 戻り値を使用してください。 ###物体### オブジェクトの配列がある場合も、同じように動作します。 リーリー ###関数###

    比較関数では、関数の呼び出しを含め、必要なことはすべて実行できます。

    リーリー ###弦###

    最初の文字列比較バージョンのショートカット:

    リーリー

    strcmp

    は、

    cmp

    で予期されることを正確に実行し、

    -1

    0

    、または

    1## を返します。 #. 宇宙船オペレーター PHP 7 では、spaceship 演算子 が導入され、タイプ間での等しい/より小さい/より大きい比較を統合および簡素化します。 リーリー 複数のフィールドで並べ替える 主に foo

    でソートしたいが、2 つの要素の

    foo

    が等しい場合は、

    baz でソートします。 リーリー 詳しい方のために説明すると、これは 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 以降では、オブジェクトの配列からプロパティを抽出することもできます。

    返事
    0
  • キャンセル返事