【PHP8.x】SORT_DESC定数の使い方
SORT_DESC定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
SORT_DESC定数は、PHPにおいて配列の要素を降順(大きい値から小さい値へ、またはアルファベットの逆順)にソートすることを指定するための定数です。
PHPの多くの配列ソート関数、特にarray_multisort()関数でソートの方向を制御するために使用されます。この定数をソート関数に渡すことで、指定された配列または配列の一部が、数値であれば最大のものが先頭に、最小のものが末尾に来るように並べ替えられます。文字列の場合も同様に、アルファベット順の逆(ZからA)に並べ替えられます。
例えば、数値が格納された配列[3, 1, 4, 1, 5, 9]に対してSORT_DESCを指定してソートを実行すると、結果は[9, 5, 4, 3, 1, 1]となります。これは、データの並びを「降るような順序」にするという意味合いで「降順」と呼ばれます。
この定数は、データリストを最新の日付から古い日付へ表示したい場合や、商品の価格が高い順に表示したい場合など、特定の情報が「大きいものから順に」並んでいる状態が必要な場面で非常に役立ちます。開発者はこの定数を利用することで、配列のソートロジックを簡潔に記述し、アプリケーションにおけるデータの提示順序を容易に制御することができます。PHPプログラミングにおいて、データを整理し表示する上で不可欠な要素の一つです。
構文(syntax)
1<?php 2$numbers = [3, 1, 4, 1, 5, 9, 2, 6]; 3array_multisort($numbers, SORT_DESC); 4?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP SORT_DESCで配列を降順ソートする
1<?php 2 3/** 4 * array_multisort() 関数と SORT_DESC 定数を使用して、配列を降順にソートする例です。 5 * SORT_DESC は、ソート順序を降順に指定するための定数です。 6 */ 7function demonstrateDescendingSort(): void 8{ 9 // ソート対象の配列を準備します。 10 $data = [5, 2, 8, 1, 9, 4]; 11 12 echo "ソート前の配列:\n"; 13 print_r($data); 14 15 // array_multisort() を使用して配列を降順にソートします。 16 // 第一引数にソートする配列を指定し、第二引数に SORT_DESC 定数を指定することで降順ソートを行います。 17 // array_multisort() は配列自体を変更します(参照渡し)。 18 if (array_multisort($data, SORT_DESC)) { 19 echo "\nソート後の配列 (降順):\n"; 20 print_r($data); 21 } else { 22 echo "\n配列のソート中にエラーが発生しました。\n"; 23 } 24} 25 26// 関数を実行して、降順ソートの動作を確認します。 27demonstrateDescendingSort(); 28 29?>
PHPのSORT_DESC定数は、配列の要素をソートする際に、データを「降順」(大きいものから小さいものへ)に並べ替えることを指定するための特別な値です。この定数自体に引数や戻り値はありませんが、array_multisort()のようなソート関数と組み合わせて使用することで、その効果を発揮します。
このサンプルコードでは、demonstrateDescendingSort関数の中で、数値の配列$dataを降順にソートする例を示しています。最初にソート前の配列を表示し、その後にarray_multisort()関数を呼び出しています。
array_multisort()関数は、配列の内容を並べ替える機能を持つ関数です。第一引数にはソート対象の配列である$dataを指定します。そして、第二引数にSORT_DESC定数を指定することで、array_multisort()に対して「この配列を降順にソートしてください」という具体的な指示を与えています。
array_multisort()関数は、ソート処理が成功した場合にはtrueを、失敗した場合にはfalseを戻り値として返します。また、この関数は渡された配列自体を直接変更します(参照渡し)。そのため、ソートが完了すると$dataの中身が降順に並べ替えられた状態になります。
結果として、ソート後の配列が[9, 8, 5, 4, 2, 1]という降順で出力され、SORT_DESC定数が配列の降順ソートにどのように利用されるかを示しています。PHPでデータを大きい順に整理したい場合にSORT_DESCは非常に便利な定数です。
SORT_DESC定数は、array_multisort()関数などで配列を「降順」にソートする際に使用する指定値です。この定数自体は、ソートの順序を指定する役割のみを持ち、単体でソート処理を行うわけではありません。
特に重要なのは、サンプルコードで利用されているarray_multisort()関数が、引数として渡された元の配列自体を直接変更する点です。新しい配列が返されるわけではないため、ソート前の配列のデータを保持したい場合は、処理の前に$data_copy = $data;のように配列のコピーを必ず作成してください。
また、array_multisort()関数は、ソート処理が成功したかどうかを真偽値で返します。エラーハンドリングのためにも、この戻り値をチェックし、ソートが意図通りに行われたかを確認する習慣をつけると、安全なコード作成に繋がります。
PHPで配列をキーで降順ソートする
1<?php 2 3/** 4 * 多次元配列を特定のキーの値で降順にソートします。 5 * 6 * この関数は、`SORT_DESC`定数を`array_multisort()`関数と組み合わせて使用し、 7 * 多次元配列内の指定されたキーの値に基づいてデータを降順に並べ替えます。 8 * `SORT_DESC`は、ソート順が降順(大きい値から小さい値へ)であることを示します。 9 * 10 * @param array $data ソート対象の多次元配列。各要素はキーと値のペアを持つ連想配列である必要があります。 11 * @param string $sortByKey ソートの基準となるキー名。このキーの値に基づいて配列がソートされます。 12 * @return array ソートされた多次元配列。元の配列は変更されません。 13 */ 14function sortArrayDescByKey(array $data, string $sortByKey): array 15{ 16 // ソート基準となるキーの値のみを抽出した配列を作成します。 17 // array_column() はPHP 5.5以降で利用可能です。 18 // 例: [['id' => 1, 'score' => 85], ['id' => 2, 'score' => 92]] から [85, 92] を抽出。 19 $column = array_column($data, $sortByKey); 20 21 // array_multisort() を使用して、多次元配列をソートします。 22 // 第一引数にソート基準となる配列 ($column) を渡します。 23 // 第二引数にソート順を指定します。ここでは`SORT_DESC`を使い降順にソートします。 24 // 第三引数にソート対象の元の配列 ($data) を渡します。 25 // array_multisort() は参照によって値を変更するため、ここでは`$data`のコピーが変更されます。 26 array_multisort($column, SORT_DESC, $data); 27 28 return $data; // ソートされた配列を返します。 29} 30 31// サンプルデータ: 商品情報の多次元配列 32$products = [ 33 ['id' => 101, 'name' => 'Laptop', 'price' => 120000], 34 ['id' => 102, 'name' => 'Mouse', 'price' => 2500], 35 ['id' => 103, 'name' => 'Keyboard', 'price' => 8000], 36 ['id' => 104, 'name' => 'Monitor', 'price' => 35000], 37 ['id' => 105, 'name' => 'Headphones', 'price' => 5000], 38]; 39 40echo "--- ソート前 ---" . PHP_EOL; 41foreach ($products as $product) { 42 echo "ID: {$product['id']}, Name: {$product['name']}, Price: {$product['price']}" . PHP_EOL; 43} 44echo PHP_EOL; 45 46// 'price' キーを基準に降順ソートを実行 47$sortedProductsByPrice = sortArrayDescByKey($products, 'price'); 48 49echo "--- 'price' で降順ソート後 ---" . PHP_EOL; 50foreach ($sortedProductsByPrice as $product) { 51 echo "ID: {$product['id']}, Name: {$product['name']}, Price: {$product['price']}" . PHP_EOL; 52} 53echo PHP_EOL; 54 55// 'id' キーを基準に降順ソートを実行 56$sortedProductsById = sortArrayDescByKey($products, 'id'); 57 58echo "--- 'id' で降順ソート後 ---" . PHP_EOL; 59foreach ($sortedProductsById as $product) { 60 echo "ID: {$product['id']}, Name: {$product['name']}, Price: {$product['price']}" . PHP_EOL; 61} 62echo PHP_EOL;
このPHPコードは、SORT_DESC定数を使用して多次元配列を特定のキーで降順にソートする方法を示しています。SORT_DESCは、ソート順序を「降順」(大きい値から小さい値へ)と指定するための定数です。
サンプルコード内のsortArrayDescByKey関数は、多次元配列を受け取り、その中の指定されたキーの値に基づいてデータを並べ替えます。まず、array_column関数を使って、ソートの基準となるキーの値だけを抜き出した新しい配列を作成します。次に、この抜き出した配列とSORT_DESC定数、そして元の多次元配列をarray_multisort関数に渡すことで、指定キーの値が降順になるように元の配列全体をソートします。
この関数は、引数としてソート対象の多次元配列$dataと、ソートの基準となるキー名を指定する文字列$sortByKeyを受け取ります。そして、ソートが完了した新しい多次元配列を戻り値として返します。元の$data配列は変更されません。
実行例では、複数の商品情報を持つ配列を「価格」や「ID」のキーを基準に降順でソートし、その結果を表示しています。これにより、最も価格の高い商品やIDの大きい商品が先頭に並ぶようにデータが整理されることが確認できます。
SORT_DESC は配列を降順(大きい順)にソートするための定数で、主に array_multisort() 関数などと組み合わせて使用します。array_multisort() は渡された配列を直接変更する性質がありますが、このサンプルコードでは関数内でソート対象の配列をコピーして操作しているため、呼び出し元の元の配列は変更されません。ソート後の結果は関数の戻り値で受け取る必要があります。また、array_column() 関数は多次元配列から特定のキーの値を抽出するのに便利ですが、PHP 5.5以降のバージョンで利用可能です。使用するPHPのバージョンを確認してください。ソート基準となるキーが配列要素に存在しない場合、期待通りのソート結果が得られない可能性があるため、キーの存在を事前に確認することをお勧めします。