【PHP8.x】ksort関数の使い方

作成日: 更新日:

ksort関数は、指定された配列をそのキーに基づいて昇順にソートする関数です。この関数は、配列のキーと値の関連付けを維持しながら、キーの順序を並べ替えます。特に連想配列において、キーのアルファベット順や数値順で要素を整理したい場合に非常に有用です。

例えば、ユーザーIDをキーとするデータ群をIDの昇順に並べ替えたい場合や、商品コードをキーとする在庫データをコード順に整理したい場合などに活用できます。

ksort関数は、第一引数にソート対象の配列を受け取ります。この配列は参照渡しされるため、関数が実行されると、元の配列自体がキーの昇順に直接変更されます。

第二引数には、オプションとしてソートフラグを指定できます。このフラグにより、キーの比較方法を細かく制御することが可能です。例えば、SORT_REGULARを指定すると標準的な比較が行われ、SORT_NUMERICを指定するとキーが数値として比較され、SORT_STRINGを指定するとキーが文字列として比較されます。これにより、キーが文字列型と数値型で混在している場合や、特定の比較ロジックを適用したい場合に柔軟に対応できます。

関数が正常に実行され、ソートが成功した場合はtrueを返し、何らかの理由で失敗した場合はfalseを返します。配列の内容をキーに基づいて整理する際に、データの整合性を保ちながら効率的に処理を行える基本的な関数として、PHPプログラミングにおいて幅広く利用されています。

基本的な使い方

構文(syntax)

<?php
$array = ["fruit" => "apple", "color" => "red", "animal" => "dog"];
ksort($array);
print_r($array);
?>

引数(parameters)

array &$array, int $flags = SORT_REGULAR

  • array & $array: ソート対象となる連想配列。この配列は参照渡しされ、関数内で直接変更されます。
  • int $flags = SORT_REGULAR: ソート順序を指定する整数フラグ。デフォルトは SORT_REGULAR で、要素を通常通り比較します。

戻り値(return)

true

ksort関数は、配列のキーを昇順に並べ替える操作が成功した場合は true を返します。

サンプルコード

PHP ksortで多次元配列のキーをソートする

<?php

// システムエンジニアを目指す初心者向けに、
// PHPのksort関数を使って多次元配列のキーをソートする例です。
// ksort関数は、配列のキー(名前)を基準にソート(並べ替え)します。
// デフォルトではアルファベット順(辞書順)に並べられます。

// ソート前の多次元配列を準備します。
// ここでは、商品のカテゴリとその中にある商品名をキーとしています。
$inventory = [
    'fruit' => [
        'apple' => 100,
        'banana' => 150,
        'cherry' => 200,
    ],
    'vegetable' => [
        'carrot' => 50,
        'daikon' => 80,
    ],
    'dairy' => [
        'milk' => 300,
        'cheese' => 400,
    ],
    'drink' => [
        'water' => 10,
        'juice' => 120,
    ],
    'bread' => [ // アルファベット順で 'fruit' と 'vegetable' の間に入るキー
        'rye' => 250,
        'wheat' => 280,
    ],
];

echo "--- ソート前の配列の状態 ---\n";
print_r($inventory);

// ksort関数を呼び出して、配列のキーをアルファベット順にソートします。
// ksortは、渡された配列のトップレベル(最も外側)のキーのみをソートします。
// この例では、'bread', 'dairy', 'drink', 'fruit', 'vegetable' の順になります。
// 内部の配列(例: 'fruit'の中の'apple', 'banana'など)のキーは、
// ksort関数によって自動的にはソートされないことに注意してください。
$result = ksort($inventory);

echo "\n--- ksort実行後の配列の状態 (トップレベルのキーがソートされました) ---\n";
print_r($inventory);

// ksort関数は、ソートに成功した場合はtrueを返します。
echo "\nksort関数の戻り値: " . ($result ? 'true (成功)' : 'false (失敗)') . "\n";

?>

PHPのksort関数は、配列のキー(名前)を基準に要素を並べ替える関数です。デフォルトではキーをアルファベット順(辞書順)にソートします。このサンプルコードでは、商品のカテゴリとその中にある商品名をキーとした多次元配列$inventoryを例に、ksort関数の使い方を示しています。

ksort($inventory)を実行すると、$inventory配列の最も外側のキー、つまり'fruit', 'vegetable', 'dairy', 'drink', 'bread'が対象となり、アルファベット順に並べ替えられます。その結果、キーは'bread', 'dairy', 'drink', 'fruit', 'vegetable'の順になります。内部にある子配列(例えば'fruit'の中の'apple', 'banana'など)のキーは、ksort関数によってはソートされない点に注意が必要です。

ksort関数の最初の引数&$arrayは、ソートしたい配列を渡す場所であり、この引数に渡された配列自体が直接変更されます。2番目の引数$flagsは、ソートの種類を指定できますが、省略すると通常の比較(SORT_REGULAR)が適用されます。ksort関数は、ソートが成功した場合にtrueを返します。この戻り値は、ソートが正しく行われたかを確認するために利用できます。

ksort関数は、多次元配列の場合、最上位(トップレベル)のキーのみをソートし、内部の配列のキーは自動的にはソートされない点にご注意ください。この関数は、引数で渡された元の配列自体を変更します(参照渡し)。そのため、ソート前の配列の状態を保持したい場合は、事前に配列のコピーを作成してから関数を呼び出すようにしてください。キーのソートはデフォルトでアルファベット順(辞書順)に行われますが、数値のキーを対象とする場合はSORT_NUMERICなどの適切なフラグを指定することで、意図しないソート順になるのを防ぐことができます。ksort関数はソートが成功した際にtrueを返しますので、処理が正しく行われたかを確認すると良いでしょう。

【PHP8.x】ksort関数の使い方 | いっしー@Webエンジニア