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_ROW每行最多有图像。

问题在于,假设我们有 15 个图像,它们的标题与图像的编号相对应(即0.jpg, 1.jpg, ... 14.jpg),它们将根据它们的名称作为字符串按顺序打印。(即0.jpg, 1.jpg, 10.jpg, 11.jpg, 12.jpg, 13.jpg, 14.jpg, 2.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

在 globbing 之后简单地对数组进行数字排序:

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