Liste déroulante avec doublon

sheira
Invité n'ayant pas de compte PHPfrance

20 sept. 2010, 11:06

Bonjour,

Avec ce code,

Code : Tout sélectionner

$sql = "SELECT DISTINCT `Domaine` FROM `offres`"; $query = mysql_query($sql); while ($item = mysql_fetch_row($query)) { if ($_GET['domaine'] != $item[0]) { $html.='<option value="'.$item[0].'">'._t_jplus($item[0]).'</option>'; }else{ $html.='<option value="'.$item[0].'" selected>'._t_jplus($item[0]).'</option>'; } }
je récupère ces valeurs dans une liste déroulante:

Code : Tout sélectionner

Accueil Secretariat Fonctions Administratives Batiment Travaux Publics Architecture Immobilier Automobile Industrie Logistique Manutention Transport Environnement Nettoyage Securite Accueil Secretariat Fonctions Administratives;Commerce Vente Grande Distribution Telemarketing Teleservices Automobile;Industrie Hotellerie Restauration Metiers de Bouche Industrie;Logistique Manutention Transport Accueil Secretariat Fonctions Administratives;Commerce Vente Grande Distribution;Marketing Communication Imprimerie Edition Banque Finance Gestion Comptabilite Assurance Informatique Technologie de l Information Commerce Vente Grande Distribution Bureaux d Etudes Methodes;Industrie Environnement Nettoyage Securite;Industrie Batiment Travaux Publics Architecture Immobilier;Industrie
J'aimerai pouvoir ne récupérer que le premier mot (ex: Accueil, Banque, Environnement) et récupérer également le premier mot qui se trouve après le caractère ";" (exemple: Commerce, Industrie) et tout ça sans doublon bien évidemment.
Est-ce que vous auriez une piste pour moi?

Merci d'avance!

Mammouth du PHP | 686 Messages

20 sept. 2010, 12:53

Peux tu mieux structurée ta liste, je n'arrive pas à comprendre comment les données ressortent ...
Concernant le premier mot après le ; regarde du coté de la fonction explode();

Mammouth du PHP | 19672 Messages

20 sept. 2010, 19:03

Regarde du coté des expressions régulières : c'est disponible dans MySQL, voir la doc sur le sujet
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

sheira
Invité n'ayant pas de compte PHPfrance

21 sept. 2010, 08:52

En fait, voici ce qu'affiche ma liste déroulante:

Code : Tout sélectionner

Accueil Secretariat Fonctions Administratives Batiment Travaux Publics Architecture Immobilier Automobile Industrie Logistique Manutention Transport Environnement Nettoyage Securite Accueil Secretariat Fonctions Administratives;Commerce Vente Grande Distribution Telemarketing Teleservices Automobile;Industrie Hotellerie Restauration Metiers de Bouche Industrie;Logistique Manutention Transport Accueil Secretariat Fonctions Administratives;Commerce Vente Grande Distribution;Marketing Communication Imprimerie Edition Banque Finance Gestion Comptabilite Assurance Informatique Technologie de l Information Commerce Vente Grande Distribution Bureaux d Etudes Methodes;Industrie Environnement Nettoyage Securite;Industrie Batiment Travaux Publics Architecture Immobilier;Industrie
J'aimerai trier ce résultat avant de l'insérer dans ma liste déroulante de façon à récupérer ce qui se trouve après le caractère ";" et trier la liste de façon a ne pas avoir de doublon.
En gros, obtenir ça:

Code : Tout sélectionner

Accueil Secretariat Fonctions Administratives Automobile Banque Finance Gestion Comptabilite Assurance Batiment Travaux Publics Architecture Immobilier Bureaux d Etudes Methodes Commerce Vente Grande Distribution Environnement Nettoyage Securite Hotellerie Restauration Metiers de Bouche Industrie Informatique Technologie de l Information Logistique Manutention Transport Marketing Communication Imprimerie Edition Telemarketing Teleservices

Mammouth du PHP | 19672 Messages

21 sept. 2010, 09:28

Mouais, je ne sais pas trop comment sont structurées tes données dans la base, mais ça doit être assez curieux à observer.

Peu importe en fait, tu peux assez facilement trier ça en supprimant les doublons en travaillant sur la base de tableaux associatifs.
Je t'explique sommairement l'algorithme et je te laisse traduire ça en code.
  1. j'initialise une variable, par exemple $activites, que je définis comme un tableau.
  2. Pour chaque ligne de données :
    1. je crée un tableau indexé en explosant la ligne sur la base du séparateur « ; » (voir fonction explode() )
    2. j'ajoute chaque élément obtenu dans mon tableau initial en utilisant chaque valeur à la fois comme index et comme valeur*;
  3. j'applique un tri alphabétique au tableau obtenu.
Voilà, j'espère que tu réussis à suivre, c'est assez basique en fait mais peut-être pas forcément très clair... tu diras si tu as du mal ;)

* Pourquoi comme index et comme valeur ? Parce qu'à chaque tour, si on retrouve un doublon de la même valeur, comme on l'utilise comme index, il va écraser la valeur précédente au lieu d'un ajouter une de plus.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 686 Messages

21 sept. 2010, 12:43

Mouais, je ne sais pas trop comment sont structurées tes données dans la base, mais ça doit être assez curieux à observer.
J'arrive pas trop a cerner non plus ...