utilisation de "function"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : utilisation de "function"

Re: utilisation de "function"

par Gakman » 30 sept. 2010, 15:28

OK merci je regarde pour finir ma page à partir de ton code alors ! :)

Re: utilisation de "function"

par stealth35 » 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()

Re: utilisation de "function"

par Gakman » 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;
    }
}

Re: utilisation de "function"

par Spols » 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).

Re: utilisation de "function"

par stealth35 » 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 ?

Re: utilisation de "function"

par Gakman » 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)

Re: utilisation de "function"

par stealth35 » 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)

Re: utilisation de "function"

par Gakman » 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

Re: utilisation de "function"

par stealth35 » 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']]);
}

Re: utilisation de "function"

par Gakman » 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

Re: utilisation de "function"

par stealth35 » 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 ?

Re: utilisation de "function"

par Gakman » 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.

Re: utilisation de "function"

par stealth35 » 23 sept. 2010, 17:31

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

Re: utilisation de "function"

par Gakman » 23 sept. 2010, 13:57

Alors j'ai un message :

Code : Tout sélectionner

Notice: Undefined index: category in /mnt/159/sdd/c/3/-/index3.php on line 55 Notice: Undefined index: lieu in /mnt/159/sdd/c/3/-/index3.php on line 55 Notice: Undefined index: date in /mnt/159/sdd/c/3/-/index3.php on line 55 Notice: Undefined index: category in /mnt/159/sdd/c/3/-/index3.php on line 58 Notice: Undefined index: category in /mnt/159/sdd/c/3/-/index3.php on line 59 Notice: Undefined index: lieu in /mnt/159/sdd/c/3/-/index3.php on line 59 -> ces 6 lignes répétées 3 fois au total
(J'ai mis - pour remplacer mon identifiant Free)

Pour isoler le soucis je travail sur un fichier index3.php et une nouvelle direction heberg2/ (que j'ai indiquée dans le code) où je peux facilement ajouter, enlever ou renommer les dossiers. Pour tester là j'ai juste créé un dossier "2010-famille+ben" car il me semble que c'est ainsi que tu compris la structure des nom de mes dossiers.

A ce propos le nom de mes dossiers est assez compliqué (schématiquement : date-catégorie+nom), c'était pour pouvoir faire un classement par catégorie et date. Mon code faisait : lister les noms de dossiers, les classer (donc par date puisqu'elle est au début), et afficher par catégorie la liste des noms (ce qu'il y a après le +). Je pense qu'en expliquant le but c'est plus facilement compréhensible, car j'utilise tout au long de mon code original des mayens détournés car je en connais pas beaucoup de commandes PHP.

J'ai bien suivi ton code et il est en effet beaucoup plus élégant que le mien :lol:. J'ai regardé le fonctionnement et j'ai compris la logique. Il y a juste au niveau du switch que je dois encore voir l'affichage.Par contre je ne vois pas l'erreur.



Pour mon problème initial, j'avais oublié de mettre global $liste; dans la fonction... Je viens de m'en rendre compte.
Mais vu ce que tu me proposes comme code, je vais poursuivre pour essayer de faire fonctionner à ta manière, se sera beaucoup mieux !

Re: utilisation de "function"

par stealth35 » 23 sept. 2010, 02:29

Merci ton aide !
Tel quel ça ne fonctionne pas mais je vais regarder demain, trop fatigué pour comprendre le code visiblement ce soir :lol:.
t'as une erreur en sortie ?