ホームページ  >  記事  >  バックエンド開発  >  php array_multisort多次元配列のソート例

php array_multisort多次元配列のソート例

WBOY
WBOYオリジナル
2016-07-25 09:04:10778ブラウズ
  1. $arr1 = array(1,9,5);
  2. $arr2 = array(6,2,4);
  3. print_r($arr1);順序は 1,5,9 です
  4. print_r($arr2); // 取得された順序は 6,4,2 です
コードをコピー
から 2 つの配列の値が対応していると推定します最初から最後まで: 1 は 6 に対応し、9 は 2 に対応し、5 は 4 に対応します。 もう 1 つの配列を追加するとどうなるかを見てみましょう。

$arr1 = 配列(1,9,5);
$arr3 = 配列(3,7,8); $arr2,$arr3);
  1. コードをコピー
  2. 結果を表示すると、1は最初から最後まで6と3に対応し、他の項目も同様です。この対応は、マニュアルでは「ソート中に元のキー名の関連付けを保持する」と呼ばれるものです。 あるいは、各配列をデータベース テーブルの列として考えることもできます。対応する 1、6、3 は 1 つのデータ行であり、9、2、7 は別のデータ行です。 。 。 array_multisort は、最初に最初の配列 (列として想像してください) でソートし、最初の配列 (列) の値が同じであれば、2 番目の配列 (列) でソートします。 テスト:
$arr1 = 配列(1,9,5,9);
$arr2 = 配列(6,2,4,1);

array_multisort($arr1,$arr2,$arr3);

コードをコピー
  1. ここでの $arr3 の結果は (3,8,0,7) であると想像できます。
  2. 2. array_multisort のパラメータ。
最も単純なケースは、上記のように 1 または n 個の配列をパラメーターとして使用することです。各配列内の項目の数が同じである必要があることに注意してください。そうでない場合は、警告が表示されて並べ替えが失敗します。 このように array_multisort($arr1,$arr2,$arr3); デフォルトでは、$arr2 を降順に並べ替えて文字列として比較する場合は、次のように記述する必要があります。 array_multisort($arr1, $arr2, SORT_DESC, SORT_STRING, $arr3); 各配列の後には、並べ替え順序フラグ、並べ替えタイプ フラグ、または両方のフラグを同時に続けることができます。ただし、各配列の後に指定できるのは、各タイプのソート フラグ 1 つだけです。 ソート順序フラグ: SORT_ASC - 昇順で並べ替えます (デフォルト) SORT_DESC - 降順で並べ替えます
ソートタイプフラグ: SORT_REGULAR - 項目を通常どおり比較します (デフォルト) SORT_NUMERIC - 項目を数値的に比較します SORT_STRING - 項目を文字列で比較します
3. array_multisort の実際の関数 通常、ソートが必要な多次元配列がいくつかあります。

$guys = Array

(

[0] => Array

(

[名前] => ジェイク
[スコア] => 80
[成績] => A
    )
  1. [ 1] => 配列
  2. (
  3. [名前] => ジン
  4. [スコア] => 70
  5. [成績] => A
  6. )
  7. [2] => 配列
  8. (
  9. [名前] => ; ジョン
  10. [スコア] => 80
  11. [成績] => A
  12. )
  13. [3] => 配列
  14. (
  15. [名前] => ベン
  16. [成績] => 20 >B
  17. )
  18. )
  19. コードをコピー
  20. PHP 配列関数 array_multisort() の使用法については、次の記事もお読みください。 php 配列関数 array_map、array_multisort 多次元配列の並べ替えの例 PHPの配列ソート関数array_multisortとuasortの違い PHP配列関数array_multisort()の使用法 phpでのarray_multisort()の使用例 たとえば、成績で降順に並べ替えたい場合、成績が同じ場合は名前で昇順に並べ替えます。現時点では、$guys の順序に従ってさらに 2 つの配列を作成する必要があります: $scores = array(80,70,80,20);$names = array('jake','jin','john',' ben ');それから array_multisort($scores, SORT_DESC, $names, $guys); ソートするたびに追加の配列を取得する必要がありますか?実際、これは qeephp の helper_array クラスに適切にカプセル化されています。使用時にわずかな変更を加えることができます。

    1. /**
    2. * 指定に基づく键对数組排序
    3. *
    4. * 使用法:
    5. * @code php
    6. * $rows = array(
    7. * array('id' => 1, 'value' => '1-1' 、'親' => 1)、
    8. * 配列('id' => 2、'値' => '2-1'、'親' => 1)、
    9. * 配列('id' => 3, '値' => '3-1', '親' => 1),
    10. * 配列('id' => 4, '値' => '4-1', '親' => 2),
    11. * 配列('id' => 5, '値' => '5-1', '親' => 2),
    12. * 配列('id' = > 6, '値' => '6-1', '親' => 3),
    13. * );
    14. *
    15. * $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC);
    16. * ダンプ($rows);
    17. * // 出力結果:
    18. * // array(
    19. * // array('id' => 6, 'value' => '6-1', 'parent' => 3),
    20. * // array('id' => 5, 'value' => '5-1', 'parent' => 2),
    21. * // array('id' => 4, 'value ' => '4-1', '親' => 2),
    22. * // 配列('id' => 3, '値' => '3-1', '親' => ; 1),
    23. * // array('id' => 2, 'value' => '2-1', 'parent' => 1),
    24. * // array('id' => ; 1, 'value' => '1-1', 'parent' => 1),
    25. * // )
    26. * @endcode
    27. *
    28. * @param array $array 要排序の数组string $keyname 排序的键
    29. * @param int $dir 排序方向
    30. *
    31. * @return array 排序後の数组
    32. */
    33. 静的関数 sortByCol($array, $keyname, $dir = SORT_ASC)
    34. {
    35. return self::sortByMultiCols($array, array($キー名 => $dir));
    36. } /**
    37. * SQL ステートメントの ORDER BY と同様に、2 次元配列を複数の列でソートします
    38. *
    39. * 使用法:
    40. * @code php
    41. * $rows = Helper_Array::sortByMultiCols($rows, array(
    42. * 'parent' => SORT_ASC,
    43. * 'name' =>SORT_DESC,
    44. * ));
    45. * @endcode
    46. *
    47. * @param array $rowset ソートする配列
    48. * @param array $args *
    49. * @return array ソートされた配列
    50. */
    51. 静的関数 sortByMultiCols($rowset, $args)
    52. $sortArray = array();
    53. foreach ( $args as $sortField => $sortDir)
    54. {
    55. foreach ($rowset as $offset => $row)
    56. {
    57. $sortArray[$sortField][$offset] = $row[$sortField];
    58. $sortRule .= '$sortArray['' . $sortDir . ', ';
    59. if (empty($sortArray) || empty($sortRule)) { return $rowset ; }
    60. eval('array_multisort(' . $sortRule . '$rowset);');
    61. return $rowset
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。