PHPで配列の中身を並び替える
- February 14th, 2011
たまに使いたいけど、忘れやすい配列のソート。
結構いろいろなソートの関数(PHP)が用意されてあるので、そのうちの一つ「uksort()」をメモしておきます。
参考サイト
ユーザー定義の比較関数
uksort()は、ユーザーが定義した比較関数を用いて、配列のキーでソートを行う関数です。
キーの文字列を比較して、ソートを行うユーザー定義の関数を用意します。文字列の先頭が「a」「an」「the」などの冠詞の場合は、冠詞を削除して次の文字列で比較するようにします。
function unarticle_sort($a, $b) { // 冠詞と記号を置換 $a = preg_replace("/^((a|an|the)s|[!-/:-@[-`{-~]+)/i", '', $a); $b = preg_replace("/^((a|an|the)s|[!-/:-@[-`{-~]+)/i", '', $b); // 大文字小文字を区別しないバイナリセーフな文字列比較 return strcasecmp($a, $b); }
uksort()の実行
$artists = array( 'Jimmy Eat World'=>4, 'McFly'=>3, 'Kasabian'=>2, 'OneRepublic'=>2, 'Arctic Monkeys'=>2, 'The Fray'=>1, ); // アーティスト名順にソート uksort($artists, "unarticle_sort"); foreach ($artists as $name => $count) { echo $name. ' - '. $count. '<br>'; } /* 出力結果 : Arctic Monkeys - 2 The Fray - 1 Jimmy Eat World - 4 Kasabian - 2 McFly - 3 OneRepublic - 2 */
- February 14th, 2011