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

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

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

作成日: 更新日:

基本的な使い方

『natsortメソッドは、ArrayObjectの要素を「自然順アルゴリズム」を使用して並べ替えるメソッドです。このメソッドは、ファイル名やバージョン番号のように、文字列の中に数字が含まれている要素を、人間が直感的に期待する順序でソートする際に非常に役立ちます。例えば、["img12.png", "img10.png", "img2.png"] という要素を持つ配列に対して、通常の辞書順ソートでは ["img10.png", "img12.png", "img2.png"] という順序になります。しかし、natsortメソッドを呼び出すと、文字列中の数値を数値として解釈して比較するため、["img2.png", "img10.png", "img12.png"] という、より自然な順序に並べ替えられます。このソート処理では、各要素のキーと値の関連性は維持されるため、連想配列にも安全に使用できます。また、このメソッドはアルファベットの大文字と小文字を区別してソートを実行します。ソートはArrayObjectインスタンス自体を直接変更し、成功した場合には true を返します。

構文(syntax)

1public ArrayObject::natsort(): true

引数(parameters)

引数なし

引数はありません

戻り値(return)

bool

ArrayObject の要素を自然順でソートした結果を返します。ソートが成功した場合は true を、失敗した場合は false を返します。

サンプルコード

PHP ArrayObject::natsort() で自然順ソートする

1<?php
2
3/**
4 * ArrayObject::natsort() メソッドの使用例。
5 *
6 * このスクリプトは、ArrayObject クラスの natsort メソッドを使って、
7 * 自然順アルゴリズムで要素をソートする方法を示します。
8 * natsort は "natural order" ソートの略で、数字部分を数値として比較するため、
9 * 'item2.txt' の次に 'item10.txt' が来るようにソートされます。
10 *
11 * キーワード「multidimensional array」に関して:
12 * ArrayObject::natsort() は、ArrayObject 自体の最上位の要素をソートします。
13 * そのため、多次元配列を直接ソートする用途には適していません。
14 * もし多次元配列の特定のキーや値を基準にソートしたい場合は、
15 * usort() や uasort() のようなカスタムソート関数をコールバックとして使用するか、
16 * ソートしたい列を抽出し、それを ArrayObject に格納して natsort() を適用するなどの
17 * 工夫が必要です。
18 *
19 * この例では、ファイル名のような文字列の配列を ArrayObject に格納し、
20 * natsort() を適用する基本的な使い方を示します。
21 */
22
23// 自然順ソートで効果がわかりやすいように、数字を含む文字列の配列を準備
24$data = [
25    'item10.txt',
26    'item2.txt',
27    'item1.txt',
28    'item20.txt',
29    'item_a.txt',
30    'item_b.txt',
31];
32
33// 配列を ArrayObject のインスタンスでラップ
34$arrayObject = new ArrayObject($data);
35
36echo "--- ソート前 (Original Order) ---\n";
37foreach ($arrayObject as $key => $value) {
38    echo sprintf("Key: %d, Value: %s\n", $key, $value);
39}
40echo "\n";
41
42// ArrayObject の要素を自然順ソートする
43// natsort() は成功した場合 true、失敗した場合 false を返します。
44$isSorted = $arrayObject->natsort();
45
46if ($isSorted) {
47    echo "--- ソート後 (Natural Order) ---\n";
48    foreach ($arrayObject as $key => $value) {
49        echo sprintf("Key: %d, Value: %s\n", $key, $value);
50    }
51} else {
52    echo "ソート操作に失敗しました。\n";
53}
54
55?>

PHP 8のArrayObject::natsort()メソッドは、ArrayObjectインスタンスが保持する要素を「自然順」でソートするためのメソッドです。自然順ソートとは、文字列中の数字部分を数値として比較するソート方式で、例えば「item10.txt」と「item2.txt」があった場合、一般的な辞書順ソートとは異なり、「item2.txt」の次に「item10.txt」が来るように並べ替えます。

このサンプルコードでは、複数のファイル名のような文字列を含む配列をArrayObjectとして初期化し、natsort()メソッドを呼び出してソートしています。ソート前とソート後のArrayObjectの内容を出力することで、自然順ソートがどのように作用するかを確認できます。

natsort()メソッドは引数を取らずに呼び出します。実行結果として、ソートが成功した場合はtrueを、失敗した場合はfalsebool型で返します。

このメソッドはArrayObjectの直接の要素のみをソートします。そのため、キーワードである「多次元配列 (multidimensional array)」の内部にある要素をソートする用途には直接適していません。多次元配列内の特定のキーや値を基準にソートしたい場合は、他のカスタムソート関数を検討する必要があります。

ArrayObject::natsort()は、PHPのArrayObjectインスタンスに格納された配列の最上位の要素を自然順アルゴリズムでソートするメソッドです。数字を含む文字列を数値として比較するため、「item2.txt」の次に「item10.txt」が来るようなソート順になります。

特に重要な注意点として、このメソッドは多次元配列を直接ソートする用途には適していません。多次元配列の内部の要素をソートしたい場合は、usort()uasort()のようなカスタムソート関数を別途利用するか、ソートしたい対象の配列をArrayObjectに格納するなどの工夫が必要です。メソッドの実行結果はboolで返されるため、ソートが成功したかを確認することをお勧めします。

関連コンテンツ