この記事では主に、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);
実行結果は次のとおりです。
[0] => array(3){"cos"
> => ] = & gt; int >int(17)
}
}
以上がこの記事の全内容です。皆様のお役に立てれば幸いです。皆さんもphp中国語ウェブサイトを応援していただければ幸いです。興味があるかもしれない記事:
PHP は複数の画像のアップロード関数と単一の画像のアップロード関数を実装します。php の例
以上がPHP の複数フィールドのソートを指定するサンプルコード multi-Dimensional array_php exampleの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。