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] Fonction array_unique capricieuse


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Par défaut [Tableaux] Fonction array_unique capricieuse
    J'ai un soucis avec la fonction array_unique. Celle-ci a pour but d'éviter qu'il y ai des doublons dans un tableau.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $destinataires=array_merge($mailsAudInt, $mailsRespReal, $mailsPilote, $mailsCopie);
    	    echo '<pre>'.print_r($destinataires, true).'</pre>';
    	    $destinataires=array_unique($destinataires);
    	    echo '<pre>'.print_r($destinataires, true).'</pre>';
    Et voilà mon résultat... Les doublons sont de la même couleur (ben oui, j'ai enlevé les noms donc...)
    Comme vous pouvez le voir, la fonction ne me retourne qu'un seul enregistrement, qui n'est pas unique dans le tableau d'origine. Alors, au juste, que fait donc la fonction array_unique?!!
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Array
    (
        [0] => Array
            (
                [mail] => m****.b******@fr.****.com
                [nom] => M**** B******
            )
    
        [1] => Array
            (
                [mail] => j*****.b******@fr.****.com
                [nom] => J***** B******
            )
    
       [2] => Array
            (
                [mail] => j****.b****@fr.****.com
                [nom] => J**** B****
            )
    
        [3] => Array
            (
                [mail] => a****.b*****@fr.****.com
                [nom] => A**** B*****
            )
    
       ............
    
        [14] => Array
            (
                [mail] => m****.b******@fr.****.com
                [nom] => M**** B******
            )
    
        [15] => Array
            (
                [mail] => j*****.b******@fr.****.com
                [nom] => J***** B******
            )
    
    )
    
    
    Résultat:
    Array
    (
        [0] => Array
            (
                [mail] => m****.b******@fr.****.com
                [nom] => M**** B******
            )
    
    )

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    tu peux remplacer tes print_r() par des var_dump() stp?
    A mon avis tu as des problemes sur les chaines qui contiennent surement des espaces, du coup elles semblent identiques alors qu'elles ne le sont pas

  3. #3
    Membre émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    array(5) {
      [0]=>
      array(2) {
        ["mail"]=>
        string(29) "***"
        ["nom"]=>
        string(15) "***"
      }
      [1]=>
      array(2) {
        ["mail"]=>
        string(29) "***"
        ["nom"]=>
        string(15) "***"
      }
      [2]=>
      array(2) {
        ["mail"]=>
        string(29) "***"
        ["nom"]=>
        string(15) "***"
      }
      [3]=>
      array(2) {
        ["mail"]=>
        string(29) "***"
        ["nom"]=>
        string(15) "***"
      }
      [4]=>
      array(2) {
        ["mail"]=>
        string(27) "***"
        ["nom"]=>
        string(14) "***"
      }
    }
    
    RESULTAT
    array(1) {
      [0]=>
      array(2) {
        ["mail"]=>
        string(29) "***"
        ["nom"]=>
        string(15) "***"
      }
    }
    Non, c'est pas ça... De toute façon, les infos sont issues du même endroit (enregistrement dans la table user) donc bon...

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    désolé j'ai mal lu ton code, fiou...
    en fait c'est normal, arra_unique() marche pas dans ton cas parce que chaque élément de ton tableau est un tableau, du coup comme la comparaison se fait au niveau "string" je pense qu'il en déduit que tous tes éléments valent "Array" et sont égaux.

    Faut que tu te fasses une fonction qui va aller faire ta propre comparaison à mon avis, sur la page du manuel de la fonction il semble y avoir des exemples de fonctions qui le font:
    http://fr.php.net/manual/fr/function.array-unique.php

  5. #5
    Membre émérite Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Par défaut
    Snif :'(
    Merci quand même.

    edit:
    Celle-là m'a l'air pas mal.

    Code php : 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
    /* 
      Initialising new array to the first element of the given array.
      Check whether current element in initial array has already been added to new array.
      If yes break to save us some time. If no, then add current element to new array. 
    */
     
    function remove_dups($array, $row_element) {    
       $new_array[0] = $array[0];
       foreach ($array as $current) {
           $add_flag = 1;
           foreach ($new_array as $tmp) {
               if ($current[$row_element]==$tmp[$row_element]) {
                   $add_flag = 0; break;
               }
           }
           if ($add_flag) $new_array[] = $current;
       }
       return $new_array;
    } // end function remove_dups

  6. #6
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Dans ton cas la fonction n'est pas très compliquée. Ce que tu fais c'est que tu fais une boucle qui parcourt ton tableau et qui va créer un nouveau tableau avec les éléments uniques.
    Pour chaque élément du premier tableau, tu utilises in_array() qui va te permettre de savoir si ce sous élément est présent dans ton tableau d'éléments uniques
    En effet, in_array() marche lui avec des tableaux d'après la documentation.

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

Discussions similaires

  1. [Tableaux] fonction explode recuperation
    Par jive dans le forum Langage
    Réponses: 6
    Dernier message: 07/06/2006, 14h55
  2. [Tableaux] fonction in_array inopérante
    Par nicoaix dans le forum Langage
    Réponses: 7
    Dernier message: 21/04/2006, 18h37
  3. [Tableaux] Fonction str_replace et les accents
    Par GarGamel55 dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2006, 18h05
  4. Réponses: 9
    Dernier message: 17/02/2006, 11h04
  5. [Tableaux] fonction retournant le 1er charactere
    Par Pepito dans le forum Langage
    Réponses: 4
    Dernier message: 22/11/2005, 14h59

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