関数の概要
PHPの uasort 関数は、配列の要素をユーザー定義の比較関数を使って並び替える際に使用します。配列のキーを保持したまま、値を自由な基準でソートできるため、複雑な条件で配列を並べ替えたい場合に非常に便利です。
パラメータの説明
array &$array
ソート対象の配列。参照渡しで渡すため、関数内で配列が直接変更されます。callable $callback
比較に使うユーザー定義関数。2つの配列の要素を受け取り、比較結果を整数で返します。
戻り値は、負の値(第一引数<第二引数)、0(等しい)、正の値(第一引数>第二引数)とする必要があります。
戻り値
ソートが成功すると true を返します。失敗した場合や、配列が不正な場合は false を返します。
使用例
基本的な使い方:数値の昇順ソート
$array = [3 => 10, 1 => 5, 7 => 7];
uasort($array, function($a, $b) {
return $a - $b;
});
print_r($array);
この例では、数値の値を昇順でソートしています。配列のキー(3, 1, 7)はそのまま保持されます。
文字列の長さでソート
$fruits = [
'a' => 'banana',
'b' => 'apple',
'c' => 'cherry',
'd' => 'date'
];
uasort($fruits, function($a, $b) {
return strlen($a) - strlen($b);
});
print_r($fruits);
各文字列の長さを基準にソートする例です。長さの短い順に並び替えられ、キーは変わりません。
複雑な比較:複数条件でソート
$users = [
['name' => 'Yamada', 'age' => 28],
['name' => 'Tanaka', 'age' => 28],
['name' => 'Suzuki', 'age' => 22],
['name' => 'Kobayashi', 'age' => 34],
];
uasort($users, function($a, $b) {
// 年齢の昇順で比較
if ($a['age'] === $b['age']) {
// 年齢が同じなら名前の辞書順で比較
return strcmp($a['name'], $b['name']);
}
return $a['age'] - $b['age'];
});
print_r($users);
この例では、まず「年齢」の昇順で並べ替え、同じ年齢だった場合は「名前」を辞書順(アルファベット順)で比較しています。
関連する関数
asort– 値を昇順にソートし、キーを保持する(ユーザー定義関数なし)ksort– キーを昇順にソートするusort– ユーザー定義関数で値をソートするが、キーは再割り当てされるuksort– ユーザー定義関数でキーをソートする
まとめ
uasort は、配列のキーを維持しながらユーザー定義の比較関数で値を柔軟にソートできる強力な関数です。単純な昇順・降順以外の並び替えが必要なときや、複雑な基準を設けたい場合に役立ちます。実務でも配列のデータを自在に操作したい際には、ぜひ活用してみてください。
