Door
Marlon Veldman
op 26-02-2011 20:06
gewijzigd op 26-02-2011 20:09
2.055 views
Ik ben lang op zoek geweest naar een script om mijn mappenlijst te sorteren op laatste wijzigingen (controle met filemtime). Dus de map die als laatste gewijzigd is, moet bovenaan komen. Hoe kan ik dat toepassen in onderstaand script?
$dirinhoud = showdirs('../../images/');
$count_album = 0;
foreach($dirinhoud as $dir)
{
$no_show = array('_', '../../images/');
$dirshow = str_replace($no_show, ' ', $dir);
$getLastModDir = date ("d-m-y", filemtime($dir));
// controleren of alles goed zit
foreach ($sortedDirs as $item) {
echo $item .' - '. date ("Y-m-d H:i:s", filemtime($dir . $item)) .'<br/>';
}
function sortByFiletime($dirs, $dir) {
$result = array();
// indien nodig een "/" toegoegen op het einde
if (substr($dir, -1) != '/') {
$dir .= '/';
}
// we vullen een tijdelijke array met enkel de file times
$fileTimes = array();
foreach($dirs as $key=>$item) {
$fileTimes[] = date ("Y-m-d H:i:s", filemtime($dir . $item));
}
// we sorteren de tijdelijke array. We krijgen niet de waarde (die tijd) terug, maar de key van de array
$keys = getSortedKeys($fileTimes);
foreach($dirs as $key=>$item) {
// $key is: 0, 1, 2, ...
// $keys is: een array van (de gesorteerde index naar tijd van $dirs)
// [ $keys[$key] ] is: de juiste key voor $dir
$result[] = $dirs[ $keys[$key] ];
}
return $result;
}
// geeft niet de items zelf terug, maar de key
function getSortedKeys($items) {
$result = array();
asort($items);
foreach($items as $key=>$item) {
$result[] = $key;
}
return $result;
}
function getSubdirs ($dir) {
$result = array();
// indien nodig een "/" toegoegen op het einde
if (substr($dir, -1) != '/') {
$dir .= '/';
}
$files = scandir($dir);
for ($i=0; $file=$files[$i]; $i++) {
if ($file == '.' || $file == '..' ) { // deze komen altijd voor, maar hebben we niet nodig
continue;
}
if (is_dir($dir . $file)) {
$result[] = $file;
}
}
return $result;
}
?>
Je kunt dit heel leuk vergelijken met usort en een eigen vergelijkingsfunctie
<?php
/**
* function to get the directorys from a directory
**/
function getDirs($dirname)
{
if(substr($dirname,-1) != '/')
{
$dirname .= '/';
}
$dirs = array();
if(is_dir($dirname))
{
foreach(scandir($dirname) AS $file)
{
if($file != '.' && $file != '..' && is_dir($dirname . $file))
{
$dirs[] = $dirname . $file;
}
}
}
return $dirs;
}
/**
* compare the directory times
**/
function compareDirTime($dirA, $dirB)
{
$timeA = (int) filemtime($dirA);
$timeB = (int) filemtime($dirB);
return $timeA - $timeB;
}
Die for loop controleert niet goed. Hij roept namelijk als laatste een niet bestaande waarde aan (dat is jouw foutmelding)
maak daar eens van:
foreach($files AS $file)