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