使用 PHP 按文件编号对图像进行排序


Sorting images by file number with PHP

这是我当前使用的代码的简化版本。

$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.jpg1.jpg , ... 14.jpg ),它们将根据其名称为字符串按顺序打印。(即 0.jpg1.jpg10.jpg11.jpg12.jpg13.jpg14.jpg2.jpg , ...)。

显然,我希望它们按数字顺序排列,因此排序算法是不可避免的(我认为)。我对 php 不太擅长,并且想知道是否有一种简单的 O(n^2) 方法可以按数字顺序而不是字符串比较对这个文件位置数组进行排序。

感谢您的任何帮助。

只需在迭代之前使用 natcasesortnatsort

$files = glob('*.{jpg,png,gif}', GLOB_BRACE);
natcasesort($files);
foreach($files as $file) { /* ... */ }
<?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

只需在

通配后按数字对数组进行排序:

$files = glob(…);
sort($files, SORT_NUMERIC);
foreach(…) {
  …;
}