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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP遍历目录下的图片,按顺序显示问题相关的知识,希望对你有一定的参考价值。

自己做了个图片显示界面,但是按以下语句执行后,图像显示顺序是以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图片
?>

<?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>";
?>

参考技术A 其实你这个问题的关键,就是图片的排序问题
你的图片名应该是数字顺序命名,而文件名是字符串,排序时是按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].'" />';

本回答被提问者和网友采纳
参考技术B 可以用 scandir 函数,返回的是一个数组列表。 再排序和显示追问

谢谢,给出修改代码可好,弄不出来。

追答$dir = "/images/";
$a = scandir($dir);

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

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

参考技术C 你的图片名应该是数字顺序命名,而文件名是字符串,排序时是按ascii码进行的,所有排序变成1,10,11,12.......2,20,22这种形式

php 获取文件目录下的文件和子文件 包括显示出指定的文件名后缀文件。

 1 /* 获取文件目录下的文件和子文件*/
 2 
 3 function getfile($path){
 4     
 5     foreach(glob($path.‘\*‘ as $file)){
 6        
 7         echo $file;
 8 //判断$file 是否是目录 ,是目录递归再次遍历
 9     if(is_dir($file)){
10            getfile($path) 
11           
12         }
13     }
14 
15 }
16 
17 
18 /*获取文件目录下指定后缀名的文件*/    
19 
20 
21 function getFileName($path){
22       
23        foreach(glob($path.‘\*‘ as $file)){
24          $i = 0;
25          if(preg_match(‘/.png$/‘,$file)){
26              $fileArr[$is] = $file;
27              print_r($fileArr); 
28            }
29            if(is_dir($file)){
30            getFileName($path);
31        }
32 
33 
34     }
35 
36 
37 }
38                 

 

以上是关于PHP遍历目录下的图片,按顺序显示问题的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉ffmpeg按顺序遍历目录中的所有文件

遍历某个文件夹(目录)下的所有文件

php 遍历文件夹文件问题

c_cpp Linux的遍历读取目录下的图片路径

php如何显示,排列指定文件夹中所有文件夹名

php写一个函数,能够遍历一个文件夹下的所有文件和子文件夹