pas de .jpg ou .pgn ?, la date est de quelle format ?, la catergoie peu contenir des accent ou des espace ? le lieu aussi ?Se sont des dossiers nommés "date-catégorie+lieu".
Il y a des fichiers dedans (des photos et des vidéos) mais c'est sans importance, je les traiterai avec un autre script.
fais comme ca dans la boucle :Non des dossiers, pas de fichier.
exemple simple : 2008-v+tokyo
à l'heure actuelle j'utilisais 2 catégories :
f = famille
v = vacances
preg_match('/^(?P<date>[^-]+)-(?P<category>[^+]+)\+(?P<lieu>.+)$/u', $filename, $matches);
if($matches)
{
$temp[$matches['category']][$matches['lieu']][$matches['date']] = $file;
ksort($temp);
ksort($temp[$matches['category']]);
ksort($temp[$matches['category']][$matches['lieu']]);
}Code : Tout sélectionner
Notice: Undefined variable: temp in /mnt/159/sdd/c/3/-/index2.php on line 65
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Passed variable is not an array or object, using empty array instead' in /mnt/159/sdd/c/3/-/index2.php:65 Stack trace: #0 /mnt/159/sdd/c/3/-/index2.php(65): ArrayIterator->__construct(NULL) #1 {main} thrown in /mnt/159/sdd/c/3/-/index2.php on line 65$rec = new RecursiveIteratorIterator($arr, RecursiveIteratorIterator::SELF_FIRST);
Là je ne saisi pas ton code mais l'erreur a changé ! Donc c'est la bonne voie ?
foreach($dir as $filename => $file)
{
var_dump($filename);
}
exit;
et donne moi les 5 premiers (tu peu modifié les nom y'a pa de soucis)Code : Tout sélectionner
int(0) int(1) int(2)
preg_match('/^(?P<date>[^-]+)-(?P<category>[^+]+)\+(?P<lieu>.+)$/u', $file->getFilename(), $matches);
t'as quelle version de PHP ?Oui merci j'ai trouvé tout seul mon oubli de passer la variable en global (j'en parle dans un de mes posts de la page précédente).J'ai pas compris vers quoi on t'oriente, mais l'erreur dans ton code du premier post vient d'un problème local versus global.
Lorsque tu n'utilise pas de fonction, la variable $liste est global et le code la trouve pour l'utiliser. Lorsque tu encapsule ton code dans une fonction, les variables deviennent local et donc ta fonction n'a pas accès à la variable $liste.
Il y a deux solutions, introduire $liste dans les arguments de ta fonction ou déclarer $liste comme variable global en début de fonction (inutile dans ce cas ci je pense).
error_reporting(-1);
$dir = new DirectoryIterator('heberg2');
foreach($dir as $filename => $file)
{
var_dump($filename);
}
exit;
foreach($dir as $filename => $file)
{
preg_match('/^(?P<date>[^-]+)-(?P<category>[^+]+)\+(?P<lieu>.+)$/u', $file->getFilename(), $matches);
if($matches)
{
$temp[$matches['category']][$matches['lieu']][$matches['date']] = $file;
ksort($temp);
ksort($temp[$matches['category']]);
ksort($temp[$matches['category']][$matches['lieu']]);
}
}
$arr = new RecursiveArrayIterator($temp);
$rec = new RecursiveIteratorIterator($arr, RecursiveIteratorIterator::SELF_FIRST);
foreach($rec as $key => $value)
{
switch($rec->getDepth())
{
case 0:
echo '<h1>' . $key . '<h1>';
break;
case 1:
echo '<h2>' . $key . '<h2>';
break;
case 2:
echo '<h3>' . $value . '<h3>';
break;
default:
break;
}
}
foreach($dir as $filename => $file)
{
var_dump($filename);
}
exit;
c'etait pour le test