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

【PHP8.x】ArrayObject::natcasesort()メソッドの使い方

natcasesortメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

natcasesortメソッドは、ArrayObjectインスタンスが内部で保持している配列を、「自然順」アルゴリズムを用いて大文字と小文字を区別せずにソートするメソッドです。このメソッドは、特にファイル名やバージョン番号のように、文字列の中に数字が含まれている要素を並べ替える際に便利です。通常の辞書順ソートでは item10item2 の前に来てしまいますが、自然順ソートでは人間が直感的に期待する通り、数値の大きさに基づいて item2item10 の順に並べ替えられます。natcasesortは、natsortメソッドと同様のアルゴリズムを使用しますが、ソートの際にアルファベットの大文字と小文字を同一視する点が異なります。例えば、File_Afile_a は同じ順序として扱われます。このソート処理は、元のキーと値の関連性を維持したまま行われるため、連想配列の構造を壊すことはありません。メソッドは、オブジェクトの内部配列を直接変更し、処理が完了すると常に true を返します。

構文(syntax)

1<?php
2// ソートしたいデータを持つArrayObjectのインスタンスを作成します
3$arrayObject = new ArrayObject([
4    'img12.png',
5    'img10.png',
6    'img2.png',
7    'IMG1.png'
8]);
9
10// natcasesort()メソッドを呼び出し、自然順アルゴリズムで
11// 大文字小文字を区別せずに要素をソートします。
12// このメソッドはオブジェクトの状態を直接変更します。
13$arrayObject->natcasesort();
14
15// ソート後のArrayObjectの内容をループで表示します
16foreach ($arrayObject as $value) {
17    echo $value . "\n";
18}
19
20/*
21出力結果:
22IMG1.png
23img2.png
24img10.png
25img12.png
26*/

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

ArrayObject::natcasesort メソッドは、ArrayObject オブジェクトの要素を、大文字小文字を区別せずに自然順で並べ替えるためのメソッドです。成功した場合は true を、失敗した場合は false を返します。

サンプルコード

ArrayObject::natcasesortで自然順ソートする

1<?php
2
3/**
4 * ArrayObject::natcasesort の使用例を示します。
5 * 自然順アルゴリズムと大文字小文字を区別しないソートを ArrayObject に対して適用します。
6 */
7function demonstrateArrayObjectNatcasesort(): void
8{
9    // ソート対象のデータを準備します。
10    // 数字を含む文字列は、通常の文字列ソートとは異なり、数値として比較されます。
11    // また、大文字小文字は区別されません。
12    $data = [
13        'img10.png',
14        'img1.png',
15        'Image A.jpg',
16        'image a.jpg',
17        'img2.png',
18        'image B.jpg',
19        'file_alpha_1.txt',
20        'file_alpha_10.txt',
21        'file_alpha_2.txt',
22    ];
23
24    // ArrayObject インスタンスを作成し、上記データをカプセル化します。
25    // ArrayObject は、通常の配列のように振る舞いながら、追加の機能を提供します。
26    $arrayObject = new ArrayObject($data);
27
28    echo "--- ソート前 ---" . PHP_EOL;
29    // ソート前の配列の内容を整形して出力します。
30    foreach ($arrayObject as $key => $value) {
31        echo "  [" . $key . "] " . $value . PHP_EOL;
32    }
33    echo PHP_EOL;
34
35    // ArrayObject::natcasesort() メソッドを呼び出してソートを実行します。
36    // このメソッドは、ArrayObject 内の要素を「自然順アルゴリズム」でソートし、
37    // かつ大文字小文字を区別しません。例えば 'img1.png', 'img2.png', 'img10.png' の順になります。
38    // PHP 8 以降では、このメソッドは常に成功し、true を返します。
39    $success = $arrayObject->natcasesort();
40
41    echo "--- ソート後 (ArrayObject::natcasesort) ---" . PHP_EOL;
42    // ソート後の配列の内容を出力します。
43    foreach ($arrayObject as $key => $value) {
44        echo "  [" . $key . "] " . $value . PHP_EOL;
45    }
46    echo PHP_EOL;
47
48    // natcasesort の戻り値を確認します。
49    // PHP 8 以降では常に true です。
50    echo "ArrayObject::natcasesort の戻り値: " . ($success ? 'true' : 'false') . PHP_EOL;
51}
52
53// 関数を実行し、ArrayObject::natcasesort の動作を確認します。
54demonstrateArrayObjectNatcasesort();
55

ArrayObject::natcasesortは、PHPのArrayObjectクラスに属するメソッドです。このメソッドは、ArrayObjectにカプセル化された配列の要素を、人間が自然だと感じる順序でソートするために使用されます。特に、数字を含む文字列(例:img1.pngimg10.png)を通常のアルファベット順ではなく、数値として比較して並べ替える「自然順アルゴリズム」が適用されます。また、ソート時に大文字と小文字を区別しないため、「Image A.jpg」と「image a.jpg」のような文字列も同じものとして扱われます。

このメソッドは引数を必要とせず、呼び出すだけでArrayObject内部の配列が直接変更されます。戻り値はbool型ですが、PHP 8以降のバージョンではソートが常に成功するため、常にtrueが返されます。

サンプルコードでは、ファイル名のような文字列の配列がArrayObjectに格納され、natcasesortメソッドによってソートされる様子が示されています。これにより、img1.pngimg2.pngimg10.pngのように期待通りの順序で、かつ大文字小文字の違いを無視して整列された出力が確認できます。ArrayObjectは、標準の配列と同様に扱いながら、オブジェクト指向的なソート機能などを利用できる点が特徴です。

このサンプルコードで示されているArrayObject::natcasesortは、通常の配列ではなくArrayObjectのインスタンスに対して適用するメソッドです。ソートは、数字を含む文字列を人間が見るような自然な順序で並べ、さらに大文字小文字を区別せずに比較します。例えば、「img1.png」の次に「img2.png」、そして「img10.png」が来るといった順序になります。このメソッドは呼び出し元のArrayObjectの内容を直接変更(インプレースソート)し、ソート後は元のキーが破棄され、数値キーが新しくゼロから順に割り当てられます。PHP 8以降では、このメソッドは常にtrueを返しますので、戻り値でソートの成否を判断する必要はありません。

関連コンテンツ