ホームページ >バックエンド開発 >PHPチュートリアル >PHP 多次元配列の複数フィールドの並べ替えを指定する例

PHP 多次元配列の複数フィールドの並べ替えを指定する例

不言
不言オリジナル
2018-06-01 10:08:392144ブラウズ

この記事では主に PHP の多次元配列の複数フィールドのソートを指定する例を紹介します。必要な方は参考にしてください

array_multisort メソッドを紹介します。 array_multisort — 多数の配列または多次元配列をソートします。PHP マニュアルの手順は次のとおりです。

コードをコピーします。 コードは次のとおりです。

bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )

Parameters

arr 並べ替えました。

arg

次の各パラメータは、別の配列または前の配列のソート フラグ オプション パラメータにすることができます: SORT_ASC、SORT_DESC、SORT_REGULAR、SORT_NUMERIC、SORT_STRING…
追加の引数。


最初に指定された多次元を実装します。 1 つのフィールドによる配列のソート

ここでは、フィールドの 1 つに従って配列をソートする必要があります。配列の仮定は次のとおりです:

  $array = array(
      0=>array('id'=>8,'name'=>'Tom'),
      1=>array('id'=>9,'name'=>'Peter'),
      2=>array('id'=>5,'name'=>'Jack')
  );

2 つのフィールドの ID 値に従ってソートする必要があります。 -次元配列。変換された配列形式は次のようになります。

  $array = array(
      0=>array('id'=>5,'name'=>'Jack')
      1=>array('id'=>8,'name'=>'Tom'),
      2=>array('id'=>9,'name'=>'Peter')
  );

上記の変換を完了するには、次のように、上で紹介した array_multisort 関数を使用する必要があります。 1 ビット配列 fieldArr でソートされる配列の各配列は、受信 array_multisort でのソートに参加します。フィールド配列の値は次のとおりです。

  function sortArrByOneField(&$array, $field, $desc = false){
    $fieldArr = array();
    foreach ($array as $k => $v) {
     $fieldArr[$k] = $v[$field];
    }
    $sort = $desc == false ? SORT_ASC : SORT_DESC;
    array_multisort($fieldArr, $sort, $array);
  }

array_multisort を渡した後、$field 1 次元配列をソートし、ソートされたキーに基づいてソートされる受信配列を再構築するのと同じです。

複数のフィールドを指定して多次元配列のソートを実装する

上記の例では、1つのフィールドを指定して多次元配列のソートを実装する方法を説明していますが、複数のフィールドを指定する場合はどうすればよいですか配列をソートするには?

フィールドはいくつありますか? 2、3、あるいはそれ以上なので、この不確実な要素を排除する必要があります。

まず、並べ替え用の 2 つのフィールドを指定するための 2 つの解決策を見てみましょう:

array(0=>8,1=>9,2=>5)
上記のコードをリファクタリングするだけで、php で func_get_args 関数を使用して受信値を動的に取得できます。これにより、複数の問題を解決できます。不確実な質問の数。実装は以下の通りです:


  $arr = array(
    '0' => array(
      'id' => 3,
      'age' => 27 
    ),
    '1' => array(
      'id' => 5,
      'age' => 50
    ),
    '2' => array(
      'id' => 4,
      'age' => 44
    ),
    '3' => array(
      'id' => 3,
      'age' => 78
    ) 
  );
  foreach ( $arr as $key => $row ){
    $id[$key] = $row ['id'];
    $age[$key] = $row ['age'];
  }
  array_multisort($id, SORT_ASC, $age, SORT_DESC, $arr);
  print_r($arr);
  //result:Array([0]=>Array(['id']=>3 ['age']=>78) [1]=>Array(['id']=>3 ['age']=>27) [2]=>Array(['id']=>4 ['age']=>44) [3]=>Array(['id']=>5 ['age']=>50))

実行結果は以下の通りです:

  $array1 = array(
        0=>array('id'=>8,'name'=>'Apple','age'=> 18),
        1=>array('id'=>8,'name'=>'Bed','age'=>17),
        2=>array('id'=>5,'name'=>'Cos','age'=>16),
        3=>array('id'=>5,'name'=>'Cos','age'=>14)
  );
  function sortArrByManyField(){
    $args = func_get_args();
    if(empty($args)){
      return null;
    }
    $arr = array_shift($args);
    if(!is_array($arr)){
      throw new Exception("第一个参数不为数组");
    }
    foreach($args as $key => $field){
      if(is_string($field)){
        $temp = array();
        foreach($arr as $index=> $val){
          $temp[$index] = $val[$field];
        }
        $args[$key] = $temp;
      }
    }
    $args[] = &$arr;//引用值
    call_user_func_array('array_multisort',$args);
    return array_pop($args);
  }
  $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC);
  print_r($arr);

以上がこの記事の全内容です、読んでいただきありがとうございます。詳細については、PHP 中国語 Web サイトを参照してください。

関連する推奨事項:

日時を取得するためのphp strftime関数(使用法を切り替える)

PHPマルチタスクの第2レベルタイマーを実装する方法


以上がPHP 多次元配列の複数フィールドの並べ替えを指定する例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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