【PHP8.x】SORT_REGULAR定数の使い方
SORT_REGULAR定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
SORT_REGULAR定数は、PHPの配列をソートする際に、要素の比較方法を指定するために使用される定数です。この定数を使用すると、配列の要素が型変換なしで「通常の」方法で比較されます。具体的には、数値は数値として、文字列は文字列として、それぞれが持つ元のデータ型を保ったまま値が比較され、並べ替えられます。例えば、文字列 "10" と "2" をソートする場合、SORT_REGULARはこれらを文字列として比較するため、文字コード順に基づき "10" が "2" よりも小さいと判断され、結果として "10", "2" の順で並ぶことがあります。これは、ソート関数に比較フラグを何も指定しなかった場合のデフォルトの挙動と等しいです。主に、配列の要素を数値的な順序ではなく、そのデータ型を考慮した一般的な順序で並べ替えたい場合に利用されます。要素を数値として厳密に比較したい場合はSORT_NUMERIC、文字列として厳密に比較したい場合はSORT_STRINGといった別の定数を指定することで、意図したソート結果を得られます。用途に応じて適切な定数を選択することが、期待通りのプログラム動作を実現するために重要です。
構文(syntax)
1<?php 2$array = [3, 1, 2]; 3sort($array, SORT_REGULAR); 4?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHP array_unique: SORT_REGULAR で重複を削除する
1<?php 2 3/** 4 * array_unique() 関数で SORT_REGULAR 定数を使用して配列から重複を削除する例を示します。 5 * 6 * SORT_REGULAR は、型を変換せずに通常通り比較することで、重複を判断します。 7 * 例えば、整数値の 1 と文字列の "1" は異なる値として扱われます。 8 */ 9function demonstrateArrayUniqueWithSortRegular(): void 10{ 11 // 重複する値と異なる型の同じ値を含む配列を定義します 12 $originalArray = [1, "1", 2, 3, "3", 1, "hello", "Hello", null, null, false, 0]; 13 14 echo "--- 元の配列 ---\n"; 15 print_r($originalArray); 16 17 // array_unique() に SORT_REGULAR を指定して、重複を削除します。 18 // SORT_REGULAR フラグにより、要素は通常の比較(型変換なし)で比較されます。 19 // そのため、数値の 1 と文字列の "1" は異なるものとして扱われます。 20 $uniqueArray = array_unique($originalArray, SORT_REGULAR); 21 22 echo "\n--- array_unique(..., SORT_REGULAR) を適用した後の配列 ---\n"; 23 print_r($uniqueArray); 24 25 // 結果の説明: 26 // - 整数値の 1 と文字列の "1" は異なる値として保持されます。 27 // - 整数値の 3 と文字列の "3" は異なる値として保持されます。 28 // - 大文字・小文字が異なる "hello" と "Hello" は異なる値として保持されます。 29 // - 重複する整数値の 1 は一つに減らされます。 30 // - 重複する null は一つに減らされます。 31 // - false と 0 は異なる型のため、異なる値として扱われます。 32} 33 34// 関数の実行 35demonstrateArrayUniqueWithSortRegular();
PHPのSORT_REGULARは、配列から重複する要素を削除するarray_unique()関数などで利用される定数です。この定数を指定すると、配列の要素を比較する際に、データ型を変換せず、そのままで比較する「通常の比較」を行うよう関数に指示します。これにより、厳密な型の違いも考慮した重複判定が可能となります。
サンプルコードでは、array_unique()関数にSORT_REGULARを指定して配列から重複を削除する例を示しています。元の配列には、整数値の1と文字列の"1"、大文字・小文字が異なる"hello"と"Hello"、そして複数のnullや重複する1などが含まれています。
SORT_REGULARが適用されると、整数値の1と文字列の"1"のように型が異なる値は、たとえ見た目の値が同じでも異なるものとして扱われるため、配列内に両方が保持されます。同様に、falseと整数値の0も型が異なるため、それぞれが異なる値として残ります。一方で、完全に同じ値(型も値も一致)が複数存在する場合は、その重複は一つにまとめられます。例えば、重複する整数値の1やnullは一つに削除されます。
SORT_REGULAR自体は引数を取らず、特定の値を返すこともない定数であり、関数の挙動を制御するためのフラグとして使用されます。
SORT_REGULARは、array_unique関数で配列の重複を除去する際に、要素の型を厳密に区別して比較する定数です。この定数を使用すると、整数値の1と文字列の"1"のように値は同じでも型が異なる場合は、それぞれ別の値として扱われ、両方とも配列に残ります。同様に、論理値のfalseと整数値の0も異なる値として扱われます。もし型を区別せず、値が同じであれば重複とみなしたい場合は、この定数を使用しない、または他の比較モードを検討してください。意図しない重複除去を防ぎ、正確な結果を得るためには、比較対象のデータの型とSORT_REGULARの動作をよく理解することが重要です。