『どう書く?.org』に投稿。
お題はこちら。
自然順アルゴリズムで配列をソートしてくださいというものです。
例えば、1.txt, 10.txt, 2.txtであれば、1.txt, 10.txt, 2.txt ではなく、1.txt, 2.txt, 10.txt というように。
PHPではnatcasesort()という要求そのままの関数が存在するのですが(大文字小文字を区別するならnatsort()です)、この関数はキーの関係を保持してソートするため、キーを持たない配列をソートした場合に期待した結果になりません。
例えば、
$a = array( ’1.txt’, ’10.txt’, ’2.txt’ );
この配列をnatcasesortすると、
1 2 3 4 5 6 |
こうなる。
foreachで回すならこれで良いのですが、forで回す場合にはソートされていないように見えてしまいます。
このため、お題の回答は以下にしました。
第2パラメータを省略またはFALSEを渡せばnatcasesort()と同等、TRUEでキーの関係を保持しない結果となります。
1 2 3 4 5 6 7 8 9 10 | function NaturalSort( &$target, $sw = FALSE ) { natcasesort( $target ); if ( $sw ) { foreach ( $target as $value ) { $buf[] = $value; } $target = $buf; } } |
投稿:
http://ja.doukaku.org/comment/21159/
PHP Rank:10(74.6%)
Comments are closed.