この記事では主に PHP の多次元配列の複数フィールドのソートを指定する例を紹介します。必要な方は参考にしてください
array_multisort メソッドを紹介します。 array_multisort — 多数の配列または多次元配列をソートします。PHP マニュアルの手順は次のとおりです。
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
Parameters
arr 並べ替えました。
次の各パラメータは、別の配列または前の配列のソート フラグ オプション パラメータにすることができます: 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 サイトの他の関連記事を参照してください。