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

时间:2012-05-24 11:11:58

标签: php image sorting

这是我目前正在使用的代码的简化版本。

$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)方法按数字顺序排序这个文件位置数组,而不是通过字符串比较。

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

在迭代之前,只需使用natcasesortnatsort

$files = glob('*.{jpg,png,gif}', GLOB_BRACE);
natcasesort($files);
foreach($files as $file) { /* ... */ }

答案 1 :(得分: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

答案 2 :(得分:0)

只需在globbing之后以数字方式对数组进行排序:

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