ホームページ  >  記事  >  バックエンド開発  >  PHPカスタム関数と配列のソート例の詳細な説明

PHPカスタム関数と配列のソート例の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-06-26 11:38:111696ブラウズ

ソートについては、通常、データベースまたは nosql (例: redis) を介してソートし、それをプログラムに出力して直接使用します。ただし、場合によっては、PHP を介して配列を直接ソートし、データを PHP に保存する必要があります。最も一般的なものはオブジェクトと配列ですが、最も処理されるのは配列です。非常に豊富な 組み込み関数 ライブラリがあるため (実際、オブジェクトはある程度配列として理解することもできます)、これらの関数ライブラリは特定の機能の実装に主に役立ちます。一般的に使用されるシステム関数には、sort、asort、arsort、ksort、krsort などがあります。ここでは主に 2 次元配列 の 2 つの方法について説明します:

1. 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
        )
)

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つは、カスタム関数が特定の関数のみをサポートしていることです。複数のキーのソートをサポートしたい場合は、key を複数回実行する必要があります。システム関数 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 次元配列を並べ替えます。指定したキー値でソートする場合は、昇順または降順を指定することもできます (デフォルトは昇順)。 「価格」によると。

以上がPHPカスタム関数と配列のソート例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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