PHP遍历目录下的图片,按顺序显示问题

自己做了个图片显示界面,但是按以下语句执行后,图像显示顺序是以1,10,11,12.......2,20,22等排列的,如何修改才能按1,2,3,4...的顺序排列呢?代... 自己做了个图片显示界面,但是按以下语句执行后,图像显示顺序是以1,10,11,12.......2,20,22等排列的,如何修改才能按1,2,3,4...的顺序排列呢?
代码初学者,请多指教。

<?php
function fileShow($dir){ //遍历目录下的所有文件和文件夹
$handle = opendir($dir);
while($file = readdir($handle)){
if($file !== '..' && $file !== '.'){
$f = $dir.'/'.$file;
if(is_file($f)){
echo '<br>';
echo '|--'.$file.'<br>'; //代表文件
echo '<img class="img" src="'.$dir.'/'.$file.'"/>';
}else{
echo '<br>';
echo '--'.$file.'<br>'; //代表文件夹
fileShow($f);
}
}
}
}
fileShow($zhuanimgpath); //$zhuanimgpath是一个文件夹目录,目录内是jpg图片
?>
展开
 我来答
社南清妙0f7
2019-03-21 · TA获得超过647个赞
知道小有建树答主
回答量:449
采纳率:85%
帮助的人:116万
展开全部
<?php
error_reporting(0);
echo "<html><head><title>图片</title></head><body bgcolor=000000><center><font size=2 color=red>"; //输出html相关代码
$page = $_GET['page']; //获取当前页数
$max = 3; //设置每页显示图片最大张数
$dir = "./image/";
$handle = opendir($dir); //当前目录
while (($file = readdir($handle)) !== false) { //遍历该php文件所在目录
    list($filesname, $kzm) = explode(".", $file); //获取扩展名
    if ($kzm == "gif" or $kzm == "jpg" or $kzm == "JPG" or $kzm == "png") { //文件过滤
        if (!is_dir('./' . $file)) { //文件夹过滤
            $array[] = $file; //把符合条件的文件名存入数组
            $i++; //记录图片总张数
            
        }
    }
}
for ($j = $max * $page; $j < ($max * $page + $max) && $j < $i; ++$j) { //循环条件控制显示图片张数
    echo "<img widht=200 height=200 src=image\\" . $array[$j] . ">" . "<br>"; //输出图片数组
    
}
$Previous_page = $page - 1;
$next_page = $page + 1;
if ($Previous_page < 0) {
    echo "上页";
    echo "<a href=?page=$next_page>下页</a>";
} else if ($page <= $i / $max) {
    echo "<a href=?page=$Previous_page>上页</a>";
    echo "<a href=?page=$next_page>下页</a>";
} else {
    echo " <a href=?page=$Previous_page>上页</a>";
    echo "下页";
}
echo "</center></body></html>";
?>

zwf2zxn
2019-03-22 · TA获得超过289个赞
知道小有建树答主
回答量:270
采纳率:85%
帮助的人:105万
展开全部
其实你这个问题的关键,就是图片的排序问题
你的图片名应该是数字顺序命名,而文件名是字符串,排序时是按ascii码进行的,所有排序变成1,10,11,12.......2,20,22这种形式
所以你只需要把fileShow()函数改成递归出所有图片,放进一个数组,不直接echo输出。
然后再遍历图片数组,将图片名转化成int类型进行排序,在echo输出图片
追问
非常感谢,能不能劳驾写个代码示例一下啊
追答
//递归只返回文件数据数组,有利于后续用做其他处理
//返回结果 (三个子数组索引一一对应)
//          array(
//            'name'=>array(),    文件名
//            'type'=>array(),    文件后缀
//            'path'=>array()     文件路径
//          )
function fileShow($dir, &$fileArr=array()){ 
$handle = opendir($dir);
while($file = readdir($handle)){
if($file !== '..' && $file !== '.'){
$f = $dir.'/'.$file;
if(is_file($f)){
$temp = explode('.',$file);
//$fileArr['name']保存图片名称
$fileArr['name'][] = $temp[0];
//$fileArr['type']保存图片后缀
$fileArr['type'][] = $temp[1];
//$fileArr['path']保存图片路径
$fileArr['path'][] = $dir.'/'.$file;
}
else{
fileShow($f, $fileArr);
}
}
}
return $fileArr;
}

$imgs = fileShow($zhuanimgpath); //$zhuanimgpath是一个文件夹目录,目录内是jpg图片
asort($imgs['name'], 1);         //保持索引关系把值按数字处理进行升序
foreach($imgs['name'] as $k=>$name)
{
    echo $name.$imgs['type'][$k].'<br />';
    echo '<img style="width:100px;" src="'.$imgs['path'][$k].'" />';
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luocongjay
2019-03-22 · TA获得超过949个赞
知道小有建树答主
回答量:1382
采纳率:33%
帮助的人:440万
展开全部
可以用 scandir 函数,返回的是一个数组列表。 再排序和显示
追问
谢谢,给出修改代码可好,弄不出来。
追答
$dir = "/images/";
$a = scandir($dir);

你试试看这个排序符不符合你的预期。默认是升序, scandir($dir, 1); 是降序。

如果不符合的话,再走一遍 sort($a) 或者 usort($a , 'mySort'); mySort为自定义的函数

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
唐兴花
2019-03-22 · 贡献了超过433个回答
知道答主
回答量:433
采纳率:0%
帮助的人:29.6万
展开全部
你的图片名应该是数字顺序命名,而文件名是字符串,排序时是按ascii码进行的,所有排序变成1,10,11,12.......2,20,22这种形式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式