如何对PHP生成的图片列表进行排序

时间:2018-07-30 21:25:11

标签: php sorting

我正在使用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,我不确定我是否必须键入要排序的请求,甚至不确定。

1 个答案:

答案 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作业就会经常运行,从而重新扫描目录并添加或更新条目。

这将减轻多个客户端同时尝试连接时的巨大负担。...并解决您的排序问题。您甚至可以将文件本身存储在数据库中.....