Eviter les doublons

ladj59 Messages postés 322 Statut Membre -  
 Jiji la malice -
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. bloom
     
    Hé hé Croy!

    Tant de bonté et de mobilisation d'intelligence en une seule personne, ça force le respect.
    1
  2. croy Messages postés 457 Statut Membre 114
     
    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
    0
    1. ladj59 Messages postés 322 Statut Membre 3
       
      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>
      0
  3. croy Messages postés 457 Statut Membre 114
     
    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.
    0
  4. ladj59 Messages postés 322 Statut Membre 3
     
    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>';
    }
    ?>
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. croy Messages postés 457 Statut Membre 114
     
    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;
    	}
    ?>
    
    0
  7. ladj59 Messages postés 322 Statut Membre 3
     
    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++;
    }
    0
  8. croy Messages postés 457 Statut Membre 114
     
    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++ ?
    0
    1. Jiji la malice
       
      '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);
      }
      0
  9. ladj59 Messages postés 322 Statut Membre 3
     
    ok merci croy
    je suis vraiment un galérien
    0
  10. croy Messages postés 457 Statut Membre 114
     
    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 ?
    0
  11. ladj59 Messages postés 322 Statut Membre 3
     
    oue j'ai compris ta solution
    ma solution n'était pas logique
    0