-
- $users = array(
- array('name' => 'tom', 'age' => 20)
- , array('name' => 'anny', 'age' => ; 18)
- , array('name' => 'jack', 'age' => 22)
- );
-
コードをコピー
年齢の小さい順から大きい順に並べ替えたいと思います。
方法 1. array_multisort を使用する
年齢を抽出するには、それを 1 次元配列に格納し、年齢の昇順に並べ替えます。
コード:
-
- $ages = array();
- foreach ($users as $user) {
- $ages[] = $user['age'];
- }
- array_multisort($ages, SORT_ASC, $users);
-
コードをコピーします 実行後、$users はソートされた配列になり、印刷して確認できます。
最初に年齢で昇順に並べ替え、次に名前で昇順で並べ替える必要がある場合、メソッドは上記と同じです。つまり、追加の名前配列を抽出し、最終的な並べ替えメソッドは次のように呼び出されます。
- array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);
コードをコピー方法 2、usort を使用する
この方法では、より複雑な並べ替え方法をカスタマイズできます。
たとえば、名前の長さで降順に並べ替えます。
- usort($users, function($a, $b) {
- $al = strlen($a['name']);
- $bl = strlen($b[' name']);
- if ($al == $bl)
- return 0;
- return ($al > $bl) ? -1 : 1;
- });
-
コードをコピー
ここを使用してください無名関数は必要に応じて別途抽出することができます。
このうち、$a と $b は、$users 配列の下の要素として理解でき、名前の値に直接インデックスを付けて長さを計算し、長さを比較できます。
2 番目の方法は、並べ替えられたコンテンツを 1 次元配列に抽出するステップが不要になり、並べ替え方法がより柔軟になるため推奨されます。
|