要对磁盘上的文件进行排序。
'data/tsm/seasonal/tsm-2012-Apr-May-Jun.png',
'data/tsm/seasonal/tsm-2012-Jan-Feb-Mar.png',
'data/tsm/seasonal/tsm-2012-Jul-Aug-Sep.png',
'data/tsm/seasonal/tsm-2012-Oct-Nov-Dec.png',
'data/tsm/seasonal/tsm-2013-Apr-May-Jun.png',
'data/tsm/seasonal/tsm-2013-Jan-Feb-Mar.png'
我希望文件先按年份排序,然后按第一个月排序 例如。 4月'tsm-2012-Apr-May-Jun.tif',我希望它使用2012年4月进行分类。
<?php
function filesInRange($datadir, $parameter, $start_date, $end_date, $format, $patternval{
$matches=array();
$good_files = array();
if (is_Dir($datadir)) {
foreach (new DirectoryIterator($datadir) as $fileInfo) {
$matches=array();
if ( !$fileInfo->isDot() && $fileInfo->isFile() ) {
// create a date by parsing the file name
preg_match($patternval, $fileInfo->getFileName(), $matches);
if ($matches) {
$filedate = DateTime::createFromFormat($format, $matches[0]);
}// determine if it's between start and end date
if ($filedate >= $start_date && $filedate <= $end_date) {
$good_files[] = $datadir.$fileInfo->getFileName();
}
}
}
}
asort($good_files);
return $good_files;
}
function startend($timeper1, $timeper2, $formatse) {
global $start;
global $end;
$start = DateTime::createFromFormat( $formatse,$timeper1);
$end = DateTime::createFromFormat( $formatse,$timeper2);
}
要调用这些函数,我会这样做。
$season = substr('2012-Jan-Feb-Mar', 0, -8);
$season2 = substr('2013-Apr-May-Jun', 0, -8);
startend($season, $season2, 'Y-M');
$allfiles = filesInRange( "data/tsm/seasonal/" , 'tsm', $start, $end, 'Y-M', '/(?<year>\d{4})-(?<month>\w{3})/' );
然后我使用foreach回显目录。
foreach ($allfiles as $filesfound) {
echo '<a href="'. $filesfound.'">'. basename($filesfound). '</a>';
}
?>
不幸的是,未分类。
sean9999与我分享了此http://3v4l.org/WSaS3页面,但它没有帮助,但它提供了主意。
我想,我必须使用substr()修剪其他几个月,但它是一个数组。 谢谢你的帮助!
答案 0 :(得分:1)
或者,由于您已经获得了值但未排序,因此您可以使用usort()
进行自定义排序。您需要先将这些月份转换为月份数。
粗略的例子:
$allfiles = ['data/tsm/seasonal/tsm-2012-Apr-May-Jun.png', 'data/tsm/seasonal/tsm-2012-Jan-Feb-Mar.png', 'data/tsm/seasonal/tsm-2012-Jul-Aug-Sep.png', 'data/tsm/seasonal/tsm-2012-Oct-Nov-Dec.png', 'data/tsm/seasonal/tsm-2013-Apr-May-Jun.png', 'data/tsm/seasonal/tsm-2013-Jan-Feb-Mar.png'];
usort($allfiles, function($a, $b){
$a_base = explode('-', ltrim(basename($a, '.png'), 'tsm-')); // trim those uneeded string parts
$b_base = explode('-', ltrim(basename($b, '.png'), 'tsm-'));
array_walk($a_base, 'change_months');
array_walk($b_base, 'change_months'); // convert months to month number
$a_base = (int) implode($a_base);
$b_base = (int) implode($b_base); // glue them back again
return $a_base - $b_base;
});
function change_months(&$val) {
if(!is_numeric($val)) { // no need to convert the year
$date_month = date_parse($val);
$val = $date_month['month']; // get month number
$val = ((strlen($val) == 1) ? '0'.$val : $val);
}
}
echo '<pre>';
print_r($allfiles);
应该导致:
Array
(
[0] => data/tsm/seasonal/tsm-2012-Jan-Feb-Mar.png
[1] => data/tsm/seasonal/tsm-2012-Apr-May-Jun.png
[2] => data/tsm/seasonal/tsm-2012-Jul-Aug-Sep.png
[3] => data/tsm/seasonal/tsm-2012-Oct-Nov-Dec.png
[4] => data/tsm/seasonal/tsm-2013-Jan-Feb-Mar.png
[5] => data/tsm/seasonal/tsm-2013-Apr-May-Jun.png
)