我正在使用JavaScriptKit.com的Dynamic PHP Picture Viewer(v1.0),但我的问题是,列出的图像不是按任何顺序排列的,无论是数字顺序,字母顺序还是创建/修改/添加的日期。不必单独键入图像(因为它们有一百张),这很好,但是由于所有图像都未排序,因此令人沮丧(因为有数百张图像。)页面本身的代码是:
<script src="../15x52_images/New_England/agetpics.php" type="text/javascript"></script>
<script type="text/javascript">
<!-- Dynamic PHP Picture Viewer (v1.0)- By JavaScriptKit.com (http://www.javascriptkit.com) //--->
<!-- For this and over 400+ free scripts, visit JavaScript Kit- http://www.javascriptkit.com/ //--->
<!-- This notice must stay intact for use //--->
function populateSelect(selectobj) {
for (var i = 0; i < picsarray.length; i++)
selectobj.options[selectobj.options.length] = new Option(picsarray[i], picsarray[i])
if (selectobj.options.length > 1) {
selectobj.selectedIndex = 0
showpicture(document.getElementById("picsform").picslist)
}
}
function showpicture(selectobj) {
piccontainerobj = document.getElementById("picturearea")
resetfade(10)
piccontainerobj.innerHTML = '<img src="' + locationstring + selectobj.options[selectobj.selectedIndex].value + '">'
fadepictoview = setInterval("gradualfade(piccontainerobj)", 50)
}
function resetfade(degree) {
if (window.fadepictoview)
clearInterval(fadepictoview)
if (typeof piccontainerobj.style.MozOpacity == "string")
piccontainerobj.style.MozOpacity = degree / 100
else if (piccontainerobj.filters)
piccontainerobj.filters.alpha.opacity = degree
}
function gradualfade() {
if (typeof piccontainerobj.style.MozOpacity == "string" && piccontainerobj.style.MozOpacity < 1)
piccontainerobj.style.MozOpacity = Math.min(parseFloat(piccontainerobj.style.MozOpacity) + 0.2, 0.99)
else if (piccontainerobj.filters && piccontainerobj.filters.alpha.opacity < 100)
piccontainerobj.filters.alpha.opacity += 20
else //if not IE or Moz
clearInterval(fadepictoview)
}
window.onload = function() {
populateSelect(document.getElementById("picsform").picslist)
}
</script>
,图像目录中的代码为:
<?php
Header("content-type: application/x-javascript");
$pathstring = pathinfo($_SERVER['PHP_SELF']);
$locationstring = "http://" . $_SERVER['HTTP_HOST'] . $pathstring['dirname'] . "/";
function returnimages($dirname = ".")
{
$pattern = "(\.jpg$)|(\.png$)|(\.jpeg$)|(\.gif$)";
//create an array to hold the directory list
$files = array();
$curimage = 0;
//create a handler for the directory
if ($handle = opendir($dirname)) {
//keep going until all files in directory are read
while (false !== ($file = readdir($handle))) {
if (eregi($pattern, $file)) {
echo 'picsarray[' . $curimage . ']="' . $file . '";';
$curimage++;
}
}
//close the handler
closedir($handle);
}
//return results
return ($files);
}
echo 'var locationstring="' . $locationstring . '";';
echo 'var picsarray=new Array();';
returnimages();
?>
im都将im列出为im,我不确定我是否必须键入要排序的请求,甚至不确定。
答案 0 :(得分:2)
因此,您只有一个文件名数组。 IE $files[0]="foolish.jpg"
和$files[1]="aberforth.png"
。如果根据文件名排序可以,只需通过sort()
运行数组即可。否则,您需要将数组扩展为多维,每个元素都是一个关联数组-或创建一个Image对象并创建一个数组。无论哪种方式,您都需要提取其他要排序的内容-文件扩展名,大小,修改日期等-并包含该信息,以便您可以构建数组,然后使用{ {1}}和您自己定义的排序方法。
IE,
usort()
或者代替关联数组,也可以创建自己的ImageFile类并创建这些对象的数组。
无论哪种方式,您都可以通过$files[0]['name']="foolish.jpg";
$files[0]['size']="1678013";
$files[0]['dlm']=filetime($files[0]['name]);
进行排序。
但是......
所有这些都将非常低效,尤其是当您的图像数量增加时。最好将所有这些信息存储在数据库中-理想情况是在上传图像时进行填充。对于已经存在的图像,只需编写一个脚本来收集和插入一次数据。或者,如果您是通过scp,ftp等上传的,而不是通过Web表单上传的,那么cron作业就会经常运行,从而重新扫描目录并添加或更新条目。
这将减轻多个客户端同时尝试连接时的巨大负担。...并解决您的排序问题。您甚至可以将文件本身存储在数据库中.....