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

PHP & Base de données Discussion :

Erreur ksort sur array après un unserialize


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut Erreur ksort sur array après un unserialize
    Bonsoir,


    J'utilise un array que je stock en BDD à l'aide de serialize($mon_array).
    Pour info, c'est un tableau associatif, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Array(
    "titre1" => "Impli",
    "titre2" => "Machin"
    );
    J'extrais donc mon array à l'aide d'un mysql_fetch_assoc();, puis j'utlise la fonction unserialize() afin de retrouver mon "vrai" tableau. Jusqu'ici, pas de problème.
    Mais tout se complique lorsque je souhaite trier les clefs de mon tableau ...

    La fonction ksort() me sort sans arrêt un FALSE si je m'en sers sur le tableau passé par unserialize(); mais ne me dit rien si j'applique cette même fonction sur un tableau que je viens de créer (sans être passé par serialize(); puis unserialize(); ).


    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $data = mysql_fetch_assoc($sql);
    $arr_conseil = unserialize($data['conseil']);
    print_r(ksort($arr_conseil));
    Me donne une erreur (FALSE).


    Mais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $arr_conseil = array("titre1" => "Impli", "titre2" => "Machin");
    print_r(ksort($arr_conseil));
    Ne me retourne pas d'erreur. (Le tableau est trié comme souhaité)


    Alors que les deux tableaux semblent (sont ?) identiques si les affiche via un print_r.



    Aurais-je raté une étape ? Ou ai-je mal utilisé telle ou telle fonctions ?



    Dans tous les cas, je vous remercie d'avance pour votre aide et vos précieux conseils.




    Impli.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Que donne un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($arr_conseil);
    ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    Les deux me retournent le même résultat.
    A savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(2) { ["titre"]=>  string(5) "Impli" ["titre2"]=>  string(6) "Machin" }

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu pourrais nous donner la valeur de la chaine avant le unserialize pour qu'on test ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    Venant de la DB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a:2:{s:4:"titre1";s:5:"Impli";s:3:"titre2";s:5:"Machin";}
    L'array crée à la volée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array("titre1"=>"Impli","titre2"=>"Machin");


    A noter que le tableau venant de la DB est correctement crée (vérifié lors du débugage).

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    Mouhahaha. Je n'ai plus qu'à aller me pendre.


    Erreur de jeunesse (ou de fatigue, j'vous laisse décider) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print_r(ksort($mon_array));
    -> Pas bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ksort($mon_arr); print_r($mon_arr);
    -> Bon.


    Une simple (et idiote ?) mauvaise utilisation de la fonction.
    Je reste quand même curieux de savoir pourquoi le fait d'affecter ksort à une variable génére une erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var = ksort($array) // False
    ksort($array) // True


    Mais pour conclure, je vous remercie pour votre aide ! ; )

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.
    Voilà la raison

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    Oui, moi aussi j'ai lu le manuel sur cette fonction.
    Et ça ne répond pas du tout à la question, mais bref. Le problème est résolu.

  9. #9
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Si justement, faire un print_r d'un booléen n'a jamais rien donné...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Par défaut
    Preuve que j'ai mal lu le manuel !

    Je trouve ça dommage (le retour d'un booléen) plutôt que d'avoir la nouvelle valeur de l'array.
    Dans le sens ou cela nous oblige à répeter la fonction autant de fois que nécessaire, alors que nous pourrions utiliser la nouvelle var.

  11. #11
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par Impli Voir le message
    Je trouve ça dommage (le retour d'un booléen) plutôt que d'avoir la nouvelle valeur de l'array.
    Dans le sens ou cela nous oblige à répeter la fonction autant de fois que nécessaire, alors que nous pourrions utiliser la nouvelle var.
    Tu as oublié un détail important, c'est que le tableau "passe" par référence.
    Du coup, il n'est pas nécessaire que la fonction retourne le tableau, celle ci agit directement sur celui ci.

    L'exemple dans la doc le reflète bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
    // $fruit passe par référence
    ksort($fruits);
    foreach ($fruits as $key => $val) {
        echo "$key = $val\n";
    }
     
    // Affiche :
    a = orange
    b = banana
    c = apple
    d = lemon
    Du coup le fait que cette fonction retourne un booleen est une aubaine, une info supplémentaire qui peu entre autre permettre de gérer l'erreur (SI false pas de traitement sur le tableau).

Discussions similaires

  1. PHPExcel erreur sur array
    Par bjo393 dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2013, 16h14
  2. [Exchange 2010] Erreur HTTP 500 sur Autodiscover après MAJ SP
    Par webrider dans le forum Exchange Server
    Réponses: 0
    Dernier message: 29/05/2012, 15h25
  3. Tri sur array : erreur de script
    Par Zuthos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/05/2011, 15h53
  4. Réponses: 13
    Dernier message: 24/06/2009, 08h19
  5. [VB6] Erreur 9 sur redim preserve
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2002, 17h29

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