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

最近某基佬在弄一个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 - 将每一项按字母顺序排列。

Comments: 2

「人生在世,留句话给我吧」

提交评论