这是我目前正在使用的代码的简化版本。
$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)方法按数字顺序排序这个文件位置数组,而不是通过字符串比较。
感谢您的帮助。
答案 0 :(得分:6)
在迭代之前,只需使用natcasesort
或natsort
:
$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);
?>
答案 2 :(得分:0)
只需在globbing之后以数字方式对数组进行排序:
$files = glob(…);
sort($files, SORT_NUMERIC);
foreach(…) {
…;
}