ホームページ  >  記事  >  バックエンド開発  >  PHP の array_multisort() 関数を使用した多次元配列ソートの実装

PHP の array_multisort() 関数を使用した多次元配列ソートの実装

不言
不言オリジナル
2018-07-17 13:59:301260ブラウズ

PHP で配列を並べ替える方法はたくさんあります。この記事では、PHP の array_multisort() 関数を使用した多次元配列の並べ替えの実装と、カスタム関数を使用した多次元配列の並べ替えについて説明します。

PHP 独自の array_multisort 関数を使用して並べ替える

<?php
    $data = array();
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 1);
    $data[] = array(&#39;volume&#39; => 85, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 98, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 7);
    // 取得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[&#39;volume&#39;];
        $edition[$key] = $row[&#39;edition&#39;];
    }
    array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
    print_r($data);
?>

出力結果:

Array
(
    [0] => Array
        (
            [volume] => 98
            [edition] => 2
        )
    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )
    [2] => Array
        (
            [volume] => 86
            [edition] => 6
        )
    [3] => Array
        (
            [volume] => 85
            [edition] => 6
        )
    [4] => Array
        (
            [volume] => 67
            [edition] => 2
        )
    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )
)

array_multisort に関する公式ドキュメントにも、より詳細な手順が記載されています

2. カスタム関数の並べ替え 1

<?php
    $data = array();
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 1);
    $data[] = array(&#39;volume&#39; => 85, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 98, &#39;edition&#39; => 2);
    $data[] = array(&#39;volume&#39; => 86, &#39;edition&#39; => 6);
    $data[] = array(&#39;volume&#39; => 67, &#39;edition&#39; => 7);
    // 取得列的列表
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[&#39;volume&#39;];
        $edition[$key] = $row[&#39;edition&#39;];
    }
    $ret = arraySort($data, &#39;volume&#39;, &#39;desc&#39;);
    print_r($ret);
    /**
     * @desc arraySort php二维数组排序 按照指定的key 对数组进行排序
     * @param array $arr 将要排序的数组
     * @param string $keys 指定排序的key
     * @param string $type 排序类型 asc | desc
     * @return array
     */
    function arraySort($arr, $keys, $type = &#39;asc&#39;) {
        $keysvalue = $new_array = array();
        foreach ($arr as $k => $v){
            $keysvalue[$k] = $v[$keys];
        }
        $type == &#39;asc&#39; ? asort($keysvalue) : arsort($keysvalue);
        reset($keysvalue);
        foreach ($keysvalue as $k => $v) {
           $new_array[$k] = $arr[$k];
        }
        return $new_array;
    }
?>

出力結果:

Array
(
    [3] => Array
        (
            [volume] => 98
            [edition] => 2
        )
    [4] => Array
        (
            [volume] => 86
            [edition] => 6
        )
    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )
    [2] => Array
        (
            [volume] => 85
            [edition] => 6
        )
    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )
    [0] => Array
        (
            [volume] => 67
            [edition] => 2
        )
)

このカスタム関数とシステム関数の違いの 1 つは、カスタム関数のみであることです。特定のキーのソートをサポートします。複数のキーのソートをサポートしたい場合は、それを複数回実行する必要があります。 システム関数 array_multisort は、一度に複数のキーを処理し、複数の並べ替えルールを指定できます。システム関数は非常に強力です。システム関数を使用することをお勧めします。結局、C の最後に実装されています。 はい、これはカスタム関数を使用して配列を並べ替える方法の単なる例です。もちろん、このカスタム関数を拡張して、より多くの並べ替えルールをサポートすることもできます。ランキング、リーダーボード、結果などのシナリオで使用されます。 まだたくさんあります。

3. カスタム関数の並べ替え 2

次の関数は、指定されたキー値に従って、指定された 2 次元配列を並べ替えます。最初に関数の定義を見てみましょう:

function array_sort($arr,$keys,$type=&#39;asc&#39;){ 
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == &#39;asc&#39;){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array; 
}

指定されたキー値に従って 2 次元配列をソートすることができ、昇順または降順のソート方法も指定できます (デフォルトは昇順)。上は $array です。2 次元配列は、「価格」に従って低位から高位にソートされます。

関連する推奨事項:

Php 配列のソートと多次元配列のソート

php 1 次元配列のソートと多次元配列並べ替え

#

以上がPHP の array_multisort() 関数を使用した多次元配列ソートの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。