ホームページ > バックエンド開発 > PHPチュートリアル > PHP の複数フィールドのソートを指定するサンプルコード multi-Dimensional array_php example

PHP の複数フィールドのソートを指定するサンプルコード multi-Dimensional array_php example

jacklove
リリース: 2023-04-01 18:40:02
オリジナル
2367 人が閲覧しました

この記事では主に、PHP の多次元配列の複数フィールドのソートを指定するサンプル コードを紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターに従って見てみましょう。

array_multisort メソッドの紹介

array_multisort — 複数の配列または多次元配列を並べ替える PHP の命令。マニュアル 次のように:

コードをコピー コードは次のとおりです:

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

パラメータ

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')
  );
ログイン後にコピー


の ID 値に従って並べ替える必要があります。変換された配列の形式は次のとおりです。

  $array = array(
      0=>array('id'=>5,'name'=>'Jack')
      1=>array('id'=>8,'name'=>'Tom'),
      2=>array('id'=>9,'name'=>'Peter')
  );
ログイン後にコピー


上記の変換を完了するには、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);
  }
ログイン後にコピー


配列の各配列の $field を保存することで、受信した array_multisort の並べ替えに参加します。 1 ビット配列 fieldArr でソートされます。フィールド配列の値は次のとおりです。

array(0=>8,1=>9,2=>5)
ログイン後にコピー


array_multisort を渡した後は、$field を 1 つソートするのと同じです。次元配列を取得し、ソートされたキーに従って、ソートされる受信配列を再構築します。

複数のフィールドを指定して多次元配列の並べ替えを実装する上記の例は、次のフィールドを指定して多次元配列の並べ替えを実装する方法を説明しています。フィールドは 1 つですが、必要に応じて、配列を並べ替えるために複数のフィールドを指定することをどのように考えますか?

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



まず、並べ替え用に 2 つのフィールドを指定するための 2 つのオプションを見てみましょう:

  $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))
ログイン後にコピー


Reconstruction In上記のコードでは、PHP の func_get_args 関数を使用して受信値を動的に取得する限り、複数のフィールドの数が不確実である問題を解決できます。実装は次のとおりです。

  $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);
ログイン後にコピー


実行結果は次のとおりです。

array(4 ){
[0] => array(3){

"cos"
> => ] = & gt; int >int(17)
}
}



以上がこの記事の全内容です。皆様のお役に立てれば幸いです。皆さんもphp中国語ウェブサイトを応援していただければ幸いです。

興味があるかもしれない記事:

PHP は複数の画像のアップロード関数と単一の画像のアップロード関数を実装します。php の例

php は名前ベースを実装します。クラスとメソッドのアルファベット順(インスタンスコード) php サンプル

PHP 携帯電話 SMS 認証コード実装プロセスの詳細な説明 php サンプル

以上がPHP の複数フィールドのソートを指定するサンプルコード multi-Dimensional array_php exampleの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート