修复OneIndex文件列表按照时间排序

/ 浏览:278 次

最近某基佬在弄一个OneDrive+OneIndex的网盘程序,发现从OneDrive获取下来的文件并没有按照创建时间的排序,后续进行了调整,利用PHP的数组排序函数array_multisort()把需要排序的数组放进去,然后用SORT_DESC进行降序排序即可。以下代码例子;代码文件在:/home/wwwroot/default/view/nexmoe/list.php;nexmoe为当前使用的模板文件文件夹。

<ul class="mdui-list">
    <li class="mdui-list-item th">
        <div class="mdui-col-xs-12 mdui-col-sm-7">文件 <i class="mdui-icon material-icons icon-sort" data-sort="name" data-order="downward">expand_more</i></div>
        <div class="mdui-col-sm-3 mdui-text-right">修改时间 <i class="mdui-icon material-icons icon-sort" data-sort="date" data-order="downward">expand_more</i></div>
        <div class="mdui-col-sm-2 mdui-text-right">大小 <i class="mdui-icon material-icons icon-sort" data-sort="size" data-order="downward">expand_more</i></div>
    </li>
    <?php if($path != '/'):?>
    <li class="mdui-list-item mdui-ripple">
        <a href="<?php echo get_absolute_path($root.$path.'../');?>">
            <div class="mdui-col-xs-12 mdui-col-sm-7">
            <i class="mdui-icon material-icons">arrow_upward</i>
                ..
            </div>
            <div class="mdui-col-sm-3 mdui-text-right"></div>
            <div class="mdui-col-sm-2 mdui-text-right"></div>
            </a>
    </li>
    <?php endif;?>
    <?php 
    $ctime_str = array();
            foreach((array)$items as $key=>$v){
            (array)$items[$key]['ctime_str'] = $v['lastModifiedDateTime'];
            $ctime_str[] = (array)$items[$key]['ctime_str']+$v;
    }
        array_multisort($ctime_str,SORT_DESC);
        /**
        主要是修改了这个位置的代码,把排序好的数组重新用foreach进行一次遍历即可;
        **/
    ?>
    <?php foreach($ctime_str as $item):?>
        <?php if(!empty($item['folder'])):?>

    <li class="mdui-list-item mdui-ripple">
        <a href="<?php echo get_absolute_path($root.$path.rawurlencode($item['name']));?>">
            <div class="mdui-col-xs-12 mdui-col-sm-7 mdui-text-truncate">
            <i class="mdui-icon material-icons">folder_open</i>
                <span><?php e($item['name']);?></span>
            </div>
            <div class="mdui-col-sm-3 mdui-text-right"><?php echo date("Y-m-d H:i:s", $item['lastModifiedDateTime']);?></div>
            <div class="mdui-col-sm-2 mdui-text-right"><?php echo onedrive::human_filesize($item['size']);?></div>
            </a>
    </li>
        <?php else:?>
    <li class="mdui-list-item file mdui-ripple">
        <a href="<?php echo get_absolute_path($root.$path).rawurlencode($item['name']);?>" target="_blank">
            <div class="mdui-col-xs-12 mdui-col-sm-7 mdui-text-truncate">
            <i class="mdui-icon material-icons"><?php echo file_ico($item);?></i>
                <span><?php e($item['name']);?></span>
            </div>
            <div class="mdui-col-sm-3 mdui-text-right"><?php echo date("Y-m-d H:i:s", $item['lastModifiedDateTime']);?></div>
            <div class="mdui-col-sm-2 mdui-text-right"><?php echo onedrive::human_filesize($item['size']);?></div>
            </a>
    </li>
        <?php endif;?>
    <?php endforeach;?>
</ul>

说明

array_multisort() 函数对多个数组或多维数组进行排序。

参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:

SORT_ASC - 默认,按升序排列。(A-Z) SORT_DESC - 按降序排列。(Z-A) 随后可以指定排序的类型:

SORT_REGULAR - 默认。将每一项按常规顺序排列。 SORT_NUMERIC - 将每一项按数字顺序排列。 SORT_STRING - 将每一项按字母顺序排列。

如果你想转载,请注明来源或者出处