uasort

関数の概要

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 は、配列のキーを維持しながらユーザー定義の比較関数で値を柔軟にソートできる強力な関数です。単純な昇順・降順以外の並び替えが必要なときや、複雑な基準を設けたい場合に役立ちます。実務でも配列のデータを自在に操作したい際には、ぜひ活用してみてください。