ホームページ >バックエンド開発 >PHPチュートリアル >PHPの2次元配列のソート問題を詳しく解説
PHP で 2 次元配列を並べ替えるには、PHP 組み込み関数 uasort() を使用できます
例 1:
ユーザー定義の比較関数を使用して配列内の値を並べ替え、インデックスを維持しますassociation
コールバック関数は以下の通りです: コールバック関数に注意 戻り値が負または false の場合、コールバック関数の第一引数が最初に配置され、第二引数が最後に配置されることを意味します
$person = array( array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21), array('num'=>'001','id'=>7,'name'=>'ahangsan','age'=>23), array('num'=>'003','id'=>1,'name'=>'bhangsan','age'=>23), array('num'=>'001','id'=>3,'name'=>'dhangsan','age'=>23), ); //负数或者false表示第一个参数应该在前 function sort_by_name($x,$y){ return strcasecmp($x['name'],$y['name']); }
。
は次のように使用されます:
uasort($person,'sort_by_name');
2 次元配列を以下に示します。参考およびインタビュー用にソート方法を示します:
//$array 要排序的数组 //$row 排序依据列 //$type 排序类型[asc or desc] //return 排好序的数组 function array_sort($array,$row,$type){ $array_temp = array(); foreach($array as $v){ $array_temp[$v[$row]] = $v; } if($type == 'asc'){ ksort($array_temp); }elseif($type='desc'){ krsort($array_temp); }else{ } return $array_temp; }
例 2:
1 次元配列のソートでは、いくつかのメソッドを使用できます。 asort や ksort などのメソッドを使用してソートを処理します。これは比較的単純です。 2次元配列のソートを実装するにはどうすればよいですか? array_multisort と usort を使用して、次のことを実現できます
たとえば、次のような配列:
コードは次のとおりです:
$users = array( array('name' => 'tom', 'age' => 20) , array('name' => 'anny', 'age' => 18) , array('name' => 'jack', 'age' => 22) );
年齢順に小さいものから大きいものまで並べ替えたいと考えています。著者は2つの方法を整理して皆さんに共有しました。
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 配列の下の要素として理解でき、名前の値に直接インデックスを付けて長さを計算し、長さを比較できます。
For PHP の 2 次元配列ソート問題の詳細な説明と関連記事については、PHP 中国語 Web サイトに注目してください。