SORT_NATURALでのsort
通常、数値交じりの文字列をソートした時の結果は
1,2,3,4,5,6,11,12,13,21
などといった数値がある場合には
1,11,12,13,2,21,3,4,5,6
などといった具合に数値と次の文字列の並び順で評価して並び替えてしまう。
こういった具合の問題が出てくるので、ある程度桁数を推測してゼロ埋めで実装・データの作成を行うことが多い。
phpではこれにたいしてSORT_NATURALというオプションをつけることである程度楽にコーディングすることが可能だ。
<?php $data = array('img15.png', 'img5.png', 'img2.png', 'img18.png', 'img3.png'); echo 'ORIGINAL<br />'; echo '<pre>'; print_r($data); echo '</pre><br />', "\n"; echo 'SORT__STRING<br />'; sort($data, SORT_STRING); echo '<pre>'; print_r($data); echo '</pre><br />', "\n"; echo 'SORT_NATURAL<br />'; sort($data, SORT_NATURAL); echo '<pre>'; print_r($data); echo '</pre'; ?>
出力
ORIGINAL
Array
(
[0] => img15.png
[1] => img5.png
[2] => img2.png
[3] => img18.png
[4] => img3.png
)
SORT__STRING
Array
(
[0] => img15.png
[1] => img18.png
[2] => img2.png
[3] => img3.png
[4] => img5.png
)
SORT_NATURAL
Array
(
[0] => img2.png
[1] => img3.png
[2] => img5.png
[3] => img15.png
[4] => img18.png
)
このような具合。
もうちょっと複雑なパターンでも行けるのかな?
先のディレクトリの一覧をこれを使ってファイルネーム順にソートするように書き換えてみよう。