問題は単純です。array_reverse()
参照により変更されません。sort()
ing関数の動作を混乱させています。代わりに、生成された戻り値を使用するだけです。そうは言っても、もっと良い方法があります。読む...
PHP5.4以降rsort($array, SORT_NATURAL)
、配列をDESC順に並べ替え、連続する数値を文字列ではなく数値として扱います。natsort()
これは、 ingよりも直接的で簡潔な方法array_reverse()
です。
(デモ)
(拡張子付きの.jpg
デモ)
(数字の前に静的文字列を使用したデモ)
glob()
ディレクトリのスキャンにを使用することをお勧めします。.png
このようにして、同じ呼び出しでフィルターを追加できます。
$dir = 'dead_dir/dead_content/';
$filepaths = glob($dir . '*.png');
rsort($filepaths, SORT_NATURAL);
foreach ($filepaths as $filepath) {
echo '<img src="' . $filepath . '" />';
}
パスを省略してファイル名を返すだけの場合は、現在の作業ディレクトリを変更するだけです。
chdir('dead_dir/dead_content');
$filenames = glob('*.png');
rsort($filenames, SORT_NATURAL);
foreach ($filenames as $filename) {
echo "<div>.png filename => $filename</div>";
}
これで、ファイル名のより特殊な処理が必要な場合は、カスタムの並べ替え機能が役立つ場合があります。
次のスニペットに示されているように、宇宙船のオペレーターは、ジャグリングのデジタル文字列を整数として自動的に入力し、rsort()
上記のソリューションと同じ結果を出します。natsort()
宇宙船オペレーターの使用は、 thenを使用するよりもさらに直接的ですarray_reverse()
。
コード:(デモ)
$filenames = ["10", "1", "100", "1000", "20", "200", "2"];
usort($filenames, function($a, $b) {
return $b <=> $a;
});
var_export($filenames);
出力:
array (
0 => '1000',
1 => '200',
2 => '100',
3 => '20',
4 => '10',
5 => '2',
6 => '1',
)
ファイル名に数字以外の先頭または末尾の文字が含まれている場合は、必要な操作を実行して、の内部を比較しながら不要な文字を削除できますusort()
。
カスタムソートが宇宙船オペレーターとどのように機能するかをよく知らない人は...
- ASCオーダーを達成するには、を書き込み
$a <=> $b
ます。
- DESCオーダーを達成するには、を書き込み
$b <=> $a
ます。