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
