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] Tri dans un tableau


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 20
    Par défaut [Tableaux] Tri dans un tableau
    Bonjour,

    j'ai un tableau dont je souhaite supprimer les doublons mais sans supprimer les cles du tableau, dans mon exemple ci dessous j'ai un tableau comme celui ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabRub = array("xxx","xxx","xxx","xxx","aaa","aaa","aaa","aaa");
    et je souhaite avoir comme resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tabRub = array("xxx","","","","aaa","","","");
    Mon script ne fonctionne que pour la premiere valeur "xxx"

    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
    <?php
     
    $tabRub = array("xxx","xxx","xxx","xxx","aaa","aaa","aaa","aaa");
     
    print_r ($tabRub);
    $counttabrub = count($tabRub);
    while ($i1 < $counttabrub)
    {
        $compare = $tabRub[$i1];
        $i2 = $i1+1;
        while ($i2 < $counttabrub)
        {
            if ($compare = $tabRub[$i2])
            {
                $tabRub[$i2] = "";
            }
            $i2++;
        }
    	$i1++;
    }
    print_r ($tabRub);
    //$tabRub = array_unique($tabRub);
     
    ?>

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    Essaie ceci :
    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
    <?php
    $tabRub = array("xxx","xxx","xxx","xxx","aaa","aaa","aaa","aaa");
     
    print_r ($tabRub);
    $counttab=count($tabRub);
     
    for ($i=0; $i<$counttab ; $i++)
    {
       	for ($j=$i+1; $j<$counttab ; $j++)
    	{
    		if (strcmp($tabRub[$i],$tabRub[$j])==0) $tabRub[$j]='';
    	}
    }
    print_r ($tabRub);
    ?>

  3. #3
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Bonjour,

    Il doit y avoir moyen de faire un peu plus propre au moyen des fonctions de tableaux mais je n'ai pas le temps d'y réfléchir. Juste jeter un oeil du coté de array_filter() je pense.

    Sinon ton code semble bon trotters213 mais j'y verrais bien une petite optimisation. Pour la première valeur du tableau, on parse tout le tableau pour changer les valeurs. Il serait bon que si la valeur d'une case du tableau vaut '', on ne repasse pas toutes les autres valeurs en revues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php 
    $tabRub = array("xxx","xxx","xxx","xxx","aaa","aaa","aaa","aaa");
    print_r ($tabRub); $counttab=count($tabRub);
    for ($i=0; $i<$counttab ; $i++) {  
    	if ( $tabRub[$i]==='' ) continue;
    	for ($j=$i+1; $j<$counttab ; $j++)  {
    		if (strcmp($tabRub[$i],$tabRub[$j])==0) $tabRub[$j]=''; 
    	} 
    } 
    print_r ($tabRub); 
    ?>
    Bonne journée

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    C'est génant d'utiliser les fonctions de php ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $tabRub = array("xxx","xxx","xxx","xxx","aaa","aaa","aaa","aaa");
    $len = count($tabRub);
    $tabRub = array_unique($tabRub) + array_fill(0, $len, "") ;
    ksort($tabRub);
    var_dump($tabRub);
    ?>

  5. #5
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Je pensais aussi à ca mais dans ta version les clés sont supprimées donc cela ne réponds pas tout à fait au problème. A mon avis, il faut utiliser array_filter()

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Non elle ne sont pas supprimées. En tout cas pas chez moi :
    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
    ~{19} echo '<?php $tabRub = array("xxx","xxx","xxx","xxx","aaa","aaa","aaa","aaa"); $len = count($tabRub); $tabRub = array_unique($tabRub) + array_fill(0, $len, "") ; ksort($tabRub); var_dump($tabRub); ?>' | php -q
    array(8) {
      [0]=>
      string(3) "xxx"
      [1]=>
      string(0) ""
      [2]=>
      string(0) ""
      [3]=>
      string(0) ""
      [4]=>
      string(3) "aaa"
      [5]=>
      string(0) ""
      [6]=>
      string(0) ""
      [7]=>
      string(0) ""
    }

  7. #7
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Citation Envoyé par FCYPBA
    Il serait bon que si la valeur d'une case du tableau vaut '', on ne repasse pas toutes les autres valeurs en revues.
    Il ne nous a pas précisé que les valeurs étaient dans l'ordre (ou alors j'ai pas bien lu ).

  8. #8
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Citation Envoyé par trotters213
    Il ne nous a pas précisé que les valeurs étaient dans l'ordre (ou alors j'ai pas bien lu ).
    Oui mais une fois que tu as remplacé tous les 'xxxx', toutes les cases ' xxxx' vallent '' qui est la valeur de remplacement donc il n'est pas utile de reparcourir tout le tableau pour effectuer un remplacement à chaque fois que l'on rencontre ''

    je ne sais pas si je me suis fait comprendre, mais enfin l'exemple que j'ai mit se suffit à lui-même.

  9. #9
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    Oui je viens de percuté maintenant que tu me l'a fait remarquer

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

Discussions similaires

  1. [Tableaux] tri dans un tableau de variables
    Par astrolane dans le forum Langage
    Réponses: 12
    Dernier message: 15/10/2007, 20h55
  2. [Tableaux] question recherche et tri dans un tableau
    Par nicopoal dans le forum Langage
    Réponses: 7
    Dernier message: 25/01/2007, 17h41
  3. [Tableaux] tri sur un tableau multi-dimensionnel
    Par nicoaix dans le forum Langage
    Réponses: 1
    Dernier message: 12/04/2006, 22h23
  4. Réponses: 7
    Dernier message: 10/03/2006, 20h09
  5. [Tableaux] Count dans un tableau
    Par krfa1 dans le forum Langage
    Réponses: 2
    Dernier message: 27/11/2005, 21h15

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