Eviter les doublons

Bonjour,
j'ai un tableau et ensuite j'affiche mais le probléme c'est que je ne veux pas mettre les doublons du tableau

comment faire svp?

<?php
foreach($tab as $data)
{
echo '<option value="'.$data.'">'.$data.'</option>';
}
?>

le tableau est préalablement trié
natcasesort($tab);
Configuration: Windows XP
Internet Explorer 7.0

10 réponses

  1. Hé hé Croy!

    Tant de bonté et de mobilisation d'intelligence en une seule personne, ça force le respect.
    1. Réfléchis un petit peu et tu trouveras comment tu peux intégrer dans ta boucle foreach :

      1.au début un test pour savoir si l'entrée en cours du tableau est identique à la précédente
      2.à la fin la sauvegarde dans une variable de la valeur en cours du tableau

      Une autre piste si le tableau vient d'une base mysql : DISTINCT ou GROUP BY
      1. ben pourtat avec le code complet ci dessous il me semble avoir mis tous les order by et distinct nécessaire donc je ne vois pas quoi changer

        <?php
        $sql=mysql_query("SELECT DISTINCT sujet FROM base_physique ORDER BY sujet") or die(mysql_error());
        $sql2=mysql_query("SELECT DISTINCT sujet2 FROM sujets ORDER BY sujet2") or die(mysql_error());
        $n=0;
        $tab = array();

        while ($sujet = mysql_fetch_array($sql)) //propose tous les sujets présents dans la table
        {
        $data = $sujet['sujet'];
        $tab[$n] = $data;
        $n++;
        }

        while ($sujet2 = mysql_fetch_array($sql2)) //propose tous les sujets présents dans la table
        {
        $data = $sujet2['sujet2'];
        $tab[$n] = $data;
        $n++;
        }
        natcasesort($tab);

        ?>

        <form id="formulaire" method="post" action="import2.php">
        <select name="sujet" id="sujet">

        <?php

        $array = array();
        foreach($tab as $data)
        {
        if (!in_array($data, $array)) {
        array_push($data, $array);
        echo '<option value="'.$data.'">'.$data.'</option>';
        }
        }
        ?>

        </select>
        <input value="envoyer" type="submit"/>
        </form>
    2. Tu persistes dans l'erreur en ne formattant pas correctement pas tes scripts pour bien montrer leur structure logique.

      Pas d'effort ==> pas d'aide.
      1. j'ai essayé ca mais toujours pas
        j'ai du mal...

        <?php
        $array = array();
        foreach($tab as $data) {
        if (!in_array($data, $array)) {
        array_push($data, $array);
        }
        }
        foreach($array as $data) {
        echo '<option value="'.$data.'">'.$data.'</option>';
        }
        ?>
        1. C'est ma semaine de bonté ! Malgré un script toujours mal formatté, voici un exemple de boucle (bien formattée) qui devrait résoudre ton pb :
          <?php
          $array = array( "a", "a", "b", "c", "c", "d" );
          foreach( $array as $data )
          	{
          	if( $data != $dataPrecedente )
          		echo '<br>...' . $data . '...';
          	$dataPrecedente = $data;
          	}
          ?>
          
          1. j'ai essayé de l'adapter à mon cas mais rien
            sachant que $tab est un array qui contient mes données

            foreach( $tab as $data )
            {
            if( $data != $data++ )
            echo '<br>...' . $data . '...';
            $data = $data++;
            }
            1. Dans le cadre de ma semaine de bonté toujours :
              foreach( $array as $data )
              	{
              	if( $data != $dataPrecedente )
              		echo '<option value="' . $data . '">' . $data . '</option>'; 
              	$dataPrecedente = $data;
              	}
              


              Quelles sont les différences avec ta tentative d'adaptation ? Dans celle-ci pourquoi $data++ ?
              1. 'tain sa marche tjs pas :
                mon array_puch ne renvoit rien.
                voiçi mon code ben formatter ! ;-)

                $concours=array();
                $concours = array_unique ($concours);

                while($row=mysql_fetch_array($jeu))
                {
                $aut = $row['auteur'];
                $total = $row['count( auteur )']*2;
                array_push($concours,$aut,$total);
                }

                while($row=mysql_fetch_array($forum))
                {
                $aut = $row['auteur'];
                $total = $row['count( auteur )']*1;
                array_push($concours,$aut,$total);
                }
            2. A mon avis tu ne mobilises pas assez ton intelligence :
              1. un formattage des scripts révèle une bonne maîtrise de la structure logique de ton script
              2. tu n'analyses pas tes erreurs : pourquoi $data++ ? différences entre ta tentative et la solution finale ?