1

これは、私が現在使用しているコードの簡略化されたバージョンです。

$files = glob('*.{jpg,png,gif}', GLOB_BRACE);
$counter = 1;
echo '<div id="images">';
foreach($files as $file) {
    if ($counter % $IMGS_PER_ROW == 1)
        echo '<div>';
    echo '<img src="' . $file . '"/>';
    if ($counter % $IMGS_PER_ROW == 0)
    echo '</div>';
    $counter++; 
}
echo '</div>';

これが行うことは、ディレクトリを検索することであり、見つかった各画像について、$IMGS_PER_ROW1 行あたり最大数の画像をインラインで画面に出力します。

これに関する問題は、15 個の画像があり、それぞれのタイトルが画像の番号 (つまり、、、0.jpg... 1.jpg)14.jpgであるとしましょう。それらは文字列としての名前に基づいて順番に印刷されます。(つまり、、、、、、、、、... ) 。0.jpg_ 1.jpg_ 10.jpg_11.jpg12.jpg13.jpg14.jpg2.jpg

明らかに、私はそれらを番号順にしたいので、ソートアルゴリズムは避けられません (私は思います)。私は PHP が苦手なので、このファイルの場所の配列を文字列比較ではなく、数値順にソートする簡単な O(n^2) 方法があるかどうか疑問に思っていました。

助けてくれてありがとう。

4

3 に答える 3

6

natcasesortorを使用するだけで、natsort反復する前に:

$files = glob('*.{jpg,png,gif}', GLOB_BRACE);
natcasesort($files);
foreach($files as $file) { /* ... */ }
于 2012-05-24T11:15:22.380 に答える
1
<?php 
   $a = array("0.jpg", "1.jpg", "10.jpg", "11.jpg", "12.jpg", "13.jpg", "14.jpg", "2.jpg");
   natcasesort ($a);
?>

http://php.net/manual/en/function.natcasesort.php

于 2012-05-24T11:17:06.740 に答える
0

グロビング後に配列を数値順に並べ替えるだけです。

$files = glob(…);
sort($files, SORT_NUMERIC);
foreach(…) {
  …;
}
于 2012-05-24T11:15:52.990 に答える