'usort' によるカスタムソート
CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 25/68。
PHP の組み込みソート関数では特定のニーズを満たせない場合、usort() 関数を使うと、要素の比較方法と並べ替え順を正確に定義できるため、最大限の柔軟性が得られます。この関数は、配列と、ソートのロジックを決定するために自分で作成するカスタム比較関数を受け取ります。
comparison function は array から 2 つの要素を受け取り、整数を返さなければなりません。最初の要素を 2 番目の要素より前にする場合は負の数、等しい場合は 0、最初の要素を 2 番目の要素より後にする場合は正の数を返します。
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// 出力: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>この例では、comparison 関数が文字列の長さの差を計算します。strlen($a) - strlen($b) が負の数を返す場合、最初の文字列のほうが短く、sorted array の先頭に来るべきであることを意味します。
他の PHP のソート関数と同様に、usort()は元の array を直接変更します。この強力な関数により、文字列の長さ、カスタムビジネスロジック、複雑な複数フィールドの comparison など、想像できるあらゆる基準でソートできる可能性が広がります。
チャレンジ
簡単JSON形式の商品価格の配列が1つ入力されます。入力を読み取り、JSON文字列を配列に変換し、価格を昇順に並べ替える比較関数を作成し、比較関数とusort()を使用して配列を並べ替え、print_r()を使用して並べ替え後の配列を出力してください。
入力形式: 数値のJSON配列を含む1行(例: [29.99,15.50,42.00,8.75,33.25])
期待される出力: 価格の昇順に並べ替えられた配列。print_r()を使用して表示します。
自分で試してみよう
<?php
// 入力を読み取る
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: 比較関数を作成し、usort() を使用して配列をソートする
// ソートされた配列を出力する
print_r($prices);
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ