utilisation de "function"

ViPHP
ViPHP | 5462 Messages

23 sept. 2010, 17:31

ca viens des noms, il sont exactement de quel type (extension compris) ?

Eléphant du PHP | 76 Messages

24 sept. 2010, 00:37

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.
@++
Gakman
-> http://gakman.free.fr

ViPHP
ViPHP | 5462 Messages

24 sept. 2010, 02:50

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.
pas de .jpg ou .pgn ?, la date est de quelle format ?, la catergoie peu contenir des accent ou des espace ? le lieu aussi ?

Eléphant du PHP | 76 Messages

24 sept. 2010, 16:45

Non des dossiers, pas de fichier.
exemple simple : 2008-v+tokyo

à l'heure actuelle j'utilisais 2 catégories :
f = famille
v = vacances
@++
Gakman
-> http://gakman.free.fr

ViPHP
ViPHP | 5462 Messages

24 sept. 2010, 17:58

Non des dossiers, pas de fichier.
exemple simple : 2008-v+tokyo

à l'heure actuelle j'utilisais 2 catégories :
f = famille
v = vacances
fais comme ca dans la boucle :
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']]);
}

Eléphant du PHP | 76 Messages

25 sept. 2010, 02:08

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
ce qui correspond à la ligne :
$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 ? :D
@++
Gakman
-> http://gakman.free.fr

ViPHP
ViPHP | 5462 Messages

25 sept. 2010, 02:14

non le pattern ne correspond pas au nom de tes fichiers
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)

Eléphant du PHP | 76 Messages

27 sept. 2010, 02:47

Désolé du temps de réponse.

J'ai ce résultat uniquement, et le bas de la page ne s'affiche pas :

Code : Tout sélectionner

int(0) int(1) int(2)
@++
Gakman
-> http://gakman.free.fr

ViPHP
ViPHP | 5462 Messages

27 sept. 2010, 02:51

je vois, fais
preg_match('/^(?P<date>[^-]+)-(?P<category>[^+]+)\+(?P<lieu>.+)$/u', $file->getFilename(), $matches);
t'as quelle version de PHP ?

Mammouth du PHP | 1967 Messages

27 sept. 2010, 11:17

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).
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 76 Messages

28 sept. 2010, 03:12

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).
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).
Là stealth35 me montre un code plus optimisé que le mien pour faire la même chose !


Pour stealth35 : c'est fait, mais ça ne change rien au problème !
Pour la version PHP j'ai fait comme tu m'as dit pour le .htaccess, je suis donc en PHP 5 comme je te le confirmais la page précédente.
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;
    }
}
@++
Gakman
-> http://gakman.free.fr

ViPHP
ViPHP | 5462 Messages

28 sept. 2010, 03:35

tu peux elever ca
foreach($dir as $filename => $file)
{
   var_dump($filename);        
}
exit;
c'etait pour le test :wink:
faut juste que le preg_match récupère le nom du fichier, chez moi avec filename ca marchait verifie quand meme le $file->getFilename()

Eléphant du PHP | 76 Messages

30 sept. 2010, 15:28

OK merci je regarde pour finir ma page à partir de ton code alors ! :)
@++
Gakman
-> http://gakman.free.fr