連想配列を値でソート
CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 22/68。
associative 配列を扱うときは、キーと値の関係を維持したまま、値で並べ替える必要がよくあります。PHP には、この目的のための2つの専用関数があります。昇順には asort()、降順には arsort() を使用します。
asort()を使って値を昇順に並べ替える方法は次のとおりです。
<?php
$students = [
"Alice" => 85,
"Bob" => 92,
"Charlie" => 78,
"Diana" => 96
];
asort($students);
print_r($students);
// 出力: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>成績が最低から最高の順に並べられていますが、それぞれの生徒の名前は成績と正しく対応したままであることに注目してください。これが通常のsort()に対するasort()の主な利点です。キーと値の対応関係が維持されます。
descending 順では、arsort() は同様に機能しますが、値を高いものから低いものへ並べ替えます。
<?php
arsort($students);
print_r($students);
// 出力: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>どちらの関数も、インデックス付きのarrayの場合と同様に、元のarrayを直接変更します。そのため、学生の成績や商品の価格など、キーと値のペアを保持したまま値でsortする必要があるあらゆる場面で、データの整理に最適です。
チャレンジ
簡単1つの入力として、従業員名とその給与をJSON形式で格納した連想配列を受け取ります。入力を読み取り、JSON文字列を配列に変換し、arsort()を使用して従業員を給与の降順(高い順)に並べ替え、print_r()を使用して並べ替えた配列を出力してください。
入力形式: 従業員名をキー、給与を値とするJSONオブジェクトを含む1行(例: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})
期待される出力: 給与の値による降順で並べ替えられた連想配列を、print_r()を使用して表示したもの
自分で試してみよう
<?php
// 入力を読み取る
$input = fgets(STDIN);
// JSONを連想配列に変換する
$employees = (array)json_decode($input, true);
// TODO: 以下に配列を給与の降順でソートするコードを書いてください
// ソートされた配列を出力する
print_r($employees);
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ