我正在尝试按年份排序结果,即从文件名中提取的年份。
这些是我正在扫描的文件夹中的N个文件:
filename_2014.jpg
filename_2013.jpg
filename_2012.jpg
filename_2011.jpg
....
....
所以我写了这个函数:
function Archivize() {
$path = opendir('./');
while($read = readdir($path)) {
if($read != '.' && $read != '..') {
$filename = current(explode(".", $read));
$getYear = substr($filename, -4);
?>
<span class="year"><?php echo $getYear ?></span>
<?php
}
}
closedir($path);
}
它基本上有效,但我不知道如何按照从文件名中提取的年份来排序结果。
我读到最好的方法是使用数组然后sort(),但我真的无法弄清楚如何将这个提示应用到我的函数中。
function Archivize() {
$path = opendir('./');
$filesArray = array(); //just defining the array
if ($handle = $path) {
$loop = 1;
while($read = readdir($path)) {
if($read != '.' && $read != '..') {
$filename = current(explode(".", $read));
$getYear = substr($filename, -4);
?>
<span class="year"><?php echo $getYear ?></span>
<?php
echo "file:$read<br/>";
$filesArray[] = $getYear; //add the file into the files array
$loop++;
}
}
closedir($path);
}
}
阵列的第二个功能可能是一个像差,但我在黑暗中爬行。
更新
实际上,数组打印为:
filename_2011.jpg
filename_2012.jpg
filename_2013.jpg
filename_2014.jpg
我想扭转它!有可能吗?
答案 0 :(得分:1)
查看asort function和关联数组。对于您的情况,您需要使用文件名作为键,并将提取的年份作为值。
答案 1 :(得分:1)
您可以使用asort
将它们存储在数组和排序数组中,然后像这样打印
function Archivize() {
$path = opendir('./');
$filesArray = array(); //just defining the array
if ($handle = $path) {
$loop = 1;
while($read = readdir($path)) {
if($read != '.' && $read != '..') {
$filename = current(explode(".", $read));
$getYear = substr($filename, -4);
echo "file:$read<br/>";
$filesArray[] = $getYear; //add the file into the files array
$loop++;
}
}
asort($filesArray);
foreach($filesArray as $n_year)
{
?>
<span class="year"><?php echo $n_year?></span><br/>
<?php
}
closedir($path);
}
}
答案 2 :(得分:1)
你需要2个循环。
一个用于向阵列添加文件,另一个用于将内容写入屏幕。
$path = opendir('./');
$list = array()
while($read = readdir($path)){
if(substr($read, 0, 1) == '.')
continue;
$year = substr(basename($read, ".jpg"), -4);
$list[$year] = $read;
}
closedir($path);
krsort($list); //using krsort to sort by keys (the years from most recent to older in this case)
foreach($list as $year => $filename){
?><span class="year"><?php echo $year ?></span><?php echo $filename;
}