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图片
?>
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遍历目录下的图片,按顺序显示问题的主要内容,如果未能解决你的问题,请参考以下文章