我使用一些Smarty代码从文件夹中收集文件:
{assign var=files value="uploads/Documenten/GPS-Tracks/*.html"|glob}
{if count($files)}
<ul>
{foreach from=$files item='file'}
{assign var='gpstrack_location' value="{$file|cms_escape:'urlpathinfo'}"}
{if !$file|contains:"index"}
<li><a href="{$file}">{$file|basename|substr:0:-5}</a></li>
{/if}
{/foreach}
</ul>
{/if}
这给了我一个基于第一个字符的排序列表。
我想实现的是基于最后两个字符的排序列表。在Smarty或PHP中可以做到这一点吗?
在此先感谢您的帮助!
更新: 我进一步做了两步:)仍然有一个我无法解决的警告: 到目前为止的代码:
<?php
$folder = '<some foldername>';
$files = array_values(preg_grep('/^([^.])/', scandir($folder, SCANDIR_SORT_ASCENDING)));
//$files = scandir($folder);
//print_r($files);
usort(var_dump($files, function ($a, $b){
if ($a || $b <> "")
return substr($b, strlen($b) - 2) - substr($a, strlen($a) - 2);
}));
?>
我得到的警告,并认为可以通过“或”语句解决:
[
有人可以让我更进一步吗?
答案 0 :(得分:0)
找到了解决方案。
<?php
$files = glob($folder.$file_name);
$current_year = date('y');
if (
usort($files, function($a, $b) {
$yearA = (int) substr($a, -7); // extension + . + last two characters
$yearB = (int) substr($b, -7);
return $yearB - $yearA; // descending, for ascending swap $yearA and $yearB
})
) {
// $files is now sorted, do your stuff here
foreach ((array) $files as $file) {
if (substr(basename($file, '.html'), -2) == $current_year) {
echo basename($file, '.html');
echo "<br />";
} else {
$current_year = $current_year - 1;
}
}
} else {
// sorting failed, show error message, exception, etc.
echo "Files not sorted";
}
?>