お役立ちコラム
PHP

PHPのusort関数を使って配列の中身を並び替える方法

PHPのusort関数を使って配列の中身を並び替える方法

PHPで取得した配列の中身を、何らかの規則に則って並び替えたくなる場合があります。

そういった際に便利なのがusort() 関数です。

今回はusort()関数を使って配列の中身を並び替える方法を解説します。

usort()関数とは?

usort() 関数は、ユーザー定義の比較関数を使用して、配列の要素を並び替えるための関数です。

第一引数に入力の配列、第二引数に比較に使用されるコールバック関数を指定します。

usort($array, $callback);
  • 第一引数:ソート対象の配列
  • 第二引数:比較関数

比較関数は、第一引数と第二引数を比較し、第一引数の方が大きい場合は正の整数、両者が等しい場合はゼロ、第二引数の方が大きい場合は負の整数を返す必要があります

正の整数が返ってきた場合は要素の順序を入れ替え、ゼロが返ってきた場合や負の整数が返ってきた場合は元の順序を維持します。

◾️比較関数の並び替えルール
第一引数の方が大きい
(正の整数が返り値の場合)
要素の順序を入れ替える
両者が等しい
(0が返り値の場合)
元の順序を維持する
第二引数の方が大きい
(負の整数が返り値の場合)
元の順序を維持する

usort()関数の使い方

単純な数値の並び替えの場合、sort()関数を使うのが最も簡単ですが、usort()の使い方に慣れるために以下の配列を昇順(小さいもの順)に並べてみます。

$numbers = [
  982,
  641,
  745,
  345,
  443,
  954,
  654,
  774
];

この場合、昇順に並べるには以下の比較関数を定義します。

function sortInt($a, $b)
{
  return $a - $b;
}

最後にusort()で配列を並び替えます。

usort($numbers, 'sortInt');

上の例では、「$a – $b」を返り値に設定することで、$aが大きい場合は正の整数、等しい場合はゼロ、第二引数の方が大きい場合は負の整数が返るようにしています。

これでprint_r()関数で$numbersの中身を出力すると、配列の中の数字が昇順に並び替えられていることが確認できます。

usort()関数を使うと、文字列の長さ順など、より複雑な並び替えもできます。

<?php
$animals = [
  'トラ',
  'ライオン',
  'キツネ',
  'ヒポポタス',
  'ヘビ'
];

function sortStrlen($a, $b)
{
  return strlen($a) - strlen($b);
}

usort($animals, 'sortStrlen');

上記例でも、比較関数は、第一引数の方が大きい場合は正の整数、両者が等しい場合はゼロ、第二引数の方が大きい場合は負の整数を返すようになっているので、以下のルールで並び替えが行われます。

◾️比較関数の並び替えルール
第一引数の方が大きい
(正の整数が返り値の場合)
要素の順序を入れ替える
両者が等しい
(0が返り値の場合)
元の順序を維持する
第二引数の方が大きい
(負の整数が返り値の場合)
元の順序を維持する

これでprint_r()関数で$animalsの中身を出力して見てみると、文字列の長さ順に配列の中身が並び替えられているのが確認できます。

まとめ

今回はPHPのusort()関数の使い方を解説しました。

PHPには配列のソート関数がいくつか存在しますが、ユーザー定義の比較関数を使用してより柔軟に並び替えたい場合はusort()関数がおすすめです。

本記事を参考に使い方を覚えてみて下さい。

今回は以上になります。最後までご覧頂き、ありがとうございました。