IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Problème avec Natsort()


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 12
    Points
    12
    Par défaut [Tableaux] Problème avec Natsort()
    Bonjour,

    J'ai un probléme avec la fonction natsort().

    J'ai 5 images dans un repertoire intitulé : 1.png , 2.png, 11.png, 111.png, 112.png.

    J'ai un fichier php qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    //recherche le nombre d'image présent dans le repertoire pour permettre le random dans le flash.
    //declaration
    $i = "";
    $chaine="";
    //fonction
    $dir = opendir("receptionImagePart");
    while($nom = readdir($dir))
    {
    	if ($nom != "." && $nom != "..")
    		{
    		$i .= $nom.",";
    		echo $nom."<br>";
    		}
    }
    $tab = explode(',', $i);
    natsort ($tab);
     
    for ($test=0; $test<count($tab); $test++)
    {
    	$chaine .= $tab[$test];
    }
     
    echo $chaine;
     
    closedir($dir);
     
    ?>
    Mon echo dans mon while donne :
    112.png
    2.png
    1.png
    111.png
    11.png

    Quand je fais natsort j'ai exactement le même ordre, alors que je devrait avoir 1.png2.png11.png111.png112.png ?

    Je ne comprends pas pourquoi, est ce que quelqu'un aurait une réponse?

    (ps // avec un sort j'ai : 1.png11.png111.png112.png2.png)

    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    ceci donne quoi?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tab = natsort($tab);
    attention à l'espace

  3. #3
    Membre à l'essai
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Cela ne donne rien. Il n'y a plus l'echo de la chaine final quand j'utilise votre code.

  4. #4
    Membre à l'essai
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    J'ai remarqué un probléme. Quand j'upload une image elle se met en premier dans le echo des noms.

    Si j'en ajoute 3 comme cela (1.png, 2.png, 3.png) elles sont dans l'ordre. Mais si je supprimé ensuite par exemple l'image 2.png et que je rajoute une 4.png,

    Le echo des noms va me sortir :
    1.png
    4.png
    3.png... mais pourquoi^^

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    je viens de tester ton code.

    Bon alors, le natsort fonctionne correctement, je pense que c'est toi qui obtient une réponse auxquels tu ne t'attends pas.

    Cela affiche tes images une en dessous de l'autres.
    1.png.
    4.png
    5.png

    a cause de cette boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while($nom = readdir($dir))
    {
    	if ($nom != "." && $nom != "..")
    		{
    		$i .= $nom.",";
    		echo $nom."<br>";
    		}
    }
    le echo $nom."<br>" affiche donc tout tes fichier un en dessous de l'autre.

    puis tu utilise natsort et là cette boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for ($test=0; $test<count($tab); $test++)
    {
    	$chaine .= $tab[$test];
    }
    concatène tout tes fichier l'un à côté de l'autre et puis est afficher par
    je pense que ce code correspond plus à tes besoins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <?php
    //recherche le nombre d'image présent dans le repertoire pour permettre le random dans le flash.
     //declaration
     $i = ""; $chaine="";
     //fonction
     $dir = opendir("Image");
     while($nom = readdir($dir))
     {
     	if ($nom != "." && $nom != "..")
     	{
     		$i .= $nom.",";
     		//echo $nom."<br>";
     	}
     }
     $tab = explode(',', $i);
     natsort($tab);
     $nbr = count($tab);
     for ($test=0; $test<$nbr; $test++)
     {
     	$chaine .= $tab[$test]."<br>";
     }
     echo $chaine;
     closedir($dir);
     ?>
    Il y a certainement moyen de faire plus simple, mais j'essaye de répondre à ta demande.

    si cela ne correspond pas à te demande, soit plus explicite dans le résultat que tu veux obtenir.

    MaitrePylos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Problème avec utf8_encode()
    Par RapidJul dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 18h22
  2. [Tableaux] Problème avec array_multisort
    Par ecocentric dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2005, 14h56
  3. [Tableaux] Problème avec les boucles
    Par speed_man002 dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 15h42
  4. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo