Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. usort() / uasort() / uksort()

usort() / uasort() / uksort()対応: PHP 4(2000)

ユーザー定義の比較関数を使って配列を並べ替える関数です。標準のソート関数では対応できない複雑な並べ替えに使用します。

構文
// ユーザー定義の比較関数で値を並べ替えます。キーは振り直されます。
usort(配列, 比較関数);

// ユーザー定義の比較関数で値を並べ替えます。キーと値の対応が維持されます。
uasort(配列, 比較関数);

// ユーザー定義の比較関数でキーを並べ替えます。
uksort(配列, 比較関数);
関数一覧
関数概要
usort($array, $callback)比較関数を使って配列を値で並べ替えます。数値キーは0から振り直されます。
uasort($array, $callback)比較関数を使って配列を値で並べ替えます。キーと値の対応関係は維持されます。
uksort($array, $callback)比較関数を使って配列をキーで並べ替えます。
サンプルコード
<?php
// 商品データを価格の昇順で並べ替えます。
$products = [
    ['name' => 'ノートPC', 'price' => 98000],
    ['name' => 'マウス', 'price' => 2500],
    ['name' => 'キーボード', 'price' => 8000],
    ['name' => 'モニター', 'price' => 35000],
];

usort($products, function($a, $b) {
    return $a['price'] - $b['price']; // 価格の昇順で比較します。
});
print_r($products); // 価格の安い順に並びます。

// PHP 7.4以降のアロー関数でも記述できます。
usort($products, fn($a, $b) => $b['price'] - $a['price']); // 価格の降順です。
print_r($products); // 価格の高い順に並びます。

// 宇宙船演算子を使った比較です。
$names = ['佐藤', '田中', '鈴木', '山田'];
usort($names, fn($a, $b) => $a <=> $b);
print_r($names); // 文字コード順に並びます。

// 連想配列をキーと値の対応を維持したまま並べ替えます。
$scores = ['太郎' => 85, '花子' => 92, '次郎' => 78];
uasort($scores, fn($a, $b) => $b - $a); // 降順で比較します。
print_r($scores); // スコアの高い順で、名前との対応が維持されます。

// キーを独自の基準で並べ替えます。
$data = ['item_3' => 'C', 'item_1' => 'A', 'item_10' => 'J', 'item_2' => 'B'];
uksort($data, fn($a, $b) => strnatcmp($a, $b)); // 自然順でキーを比較します。
print_r($data); // キーが自然な数値順で並びます。
概要

比較関数は2つの引数を受け取り、最初の引数が2番目より小さい場合は負の数、等しい場合は0、大きい場合は正の数を返す必要があります。PHP 7.0以降では宇宙船演算子『<=>』を使うと、この3つの値を簡潔に返せます。

PHP 7.4以降で導入されたアロー関数『fn($a, $b) =>』を使うと、無名関数よりも短く記述できます。複雑な比較ロジックが必要な場合は従来の無名関数を使用してください。

『usort()』はキーが振り直されるため、連想配列のキーを維持したい場合は『uasort()』を使用してください。単純な昇順・降順の並べ替えには『sort() / asort()』のほうが簡潔です。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。