Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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のバージョンを確認してください。ソート基準となるキーが配列要素に存在しない場合、期待通りのソート結果が得られない可能性があるため、キーの存在を事前に確認することをお勧めします。

関連コンテンツ