2011-03-29 63 views
3

所以我对面的这个代码块从指定的文件夹拉图像,并与img标签。OUPUTS他们来了问题与图像的排序有关。PHP在数字和字母顺序排序

所以,让我的 “图片” 文件夹中说,我有这些图片:

2.JPG B.JPG A.JPG 1.JPG

我怎样才能让这个它以数字和字母顺序列出图像?我想编号的图像是第一位的,然后,按字母顺序,所以它会列出相似图片:

1.JPG 2.JPG A.JPG B.JPG

有什么想法就这样做与我有的代码?

感谢您的帮助!

回答

4

你需要的是一种自然语言排序。

使用PHP函数natsort().. 这里..

<?php 
$url = "./images/"; 
$temp_files = scandir($url); 
natsort($temp_files); 
foreach($temp_files as $file) 
{ 
    if($file != "." && $file != ".." && $file != basename(__FILE__)) 
    { 
     echo '<a href="'.$url.$file.'" class="lightbox" title="'.$file.'"><img src="'.$url.$file.'" alt="" /></a><br />'; 
    } 
} 
?> 
+1

这工作很好,谢谢你!甚至不知道这个功能存在 – 2011-03-29 21:34:52

+0

伟大的解决方案! – 2012-08-07 14:19:26

+0

如果我想换个角度呢?第一个字母,然后数字? – 2012-08-07 14:23:13

0

您可以将链接添加到数组中,而不是立即回显它们。然后使用sort($array)以正确的顺序放置它们,并通过遍历每个foreach循环来回显它们,如:foreach($array as $image) { echo ... }

欲了解更多信息,请参见:http://php.net/manual/en/function.sort.php

+0

伟大的思想认为alike..was刚打字:) :) – zamN 2011-03-29 21:07:49

+0

哈哈。 :) – tvkanters 2011-03-29 21:09:02

+2

此外,要添加到原始文章,你可能想要检查出php.net当你想要做排序的东西。如果你在来这里之前这样做了,你可能不需要问这个问题。 – zamN 2011-03-29 21:11:48

0

我将存储阵列中的文件名,然后用sort()订购阵列。有没有更简单的方法来做到这一点,因为reddir只返回像这样的文件名:

文件名按文件系统存储的顺序返回。

0

scandir()glob()功能可以排序的目录内容都返回阵列,也可以继续使用opendir/readdir()手动构建阵列。

如果排序顺序(或缺少排序顺序)不是您喜欢的,那么您可以使用任何array sorting functions来操纵顺序,无论您喜欢。我倾向于喜欢natcasesort()

1

<?php 
    $url = "./test/"; 
    $exclude = array('.', '..'); 
    $files = array_diff(scandir($url), $exclude); 
    natsort($files); 
    print_r(array_values($files)); 
?> 

输出:

Array 
(
    [0] => 1.jpg 
    [1] => 2.jpg 
    [2] => a.jpg 
    [3] => b.jpg 
)