2011-11-20 7 views
-1

J'ai donc une table db> "schools" et une colonne dans ce tableau nommé "metro". Dans « métro » j'ai des chaînes comme ça « Station Nom 1, Nom de la station 2, station-Nom 5 »Pourquoi array_unique ne fonctionne pas avec explode()?

que je fais maintenant un formulaire de recherche avec des stations de métro choisir, donc mon regard de code comme ceci:

<select name="categoryID"> 
<? 

$metro_sql=mysql_query("SELECT metro FROM schools"); 
while($metro=mysql_fetch_array($metro_sql)){ 
    $metro_pieces = explode(", ", $metro['metro']); 
     foreach (array_unique($metro_pieces, SORT_REGULAR) as $metro_all) { 
      echo "<option value=\"".$metro_all."\">".$metro_all."</option>\n "; 
    } 
} 

Et le résultat: la station de métro 1 station de métro 2 station de métro 3 station de métro 1 station de métro 4 station de métro 5 etc. Ce que je fais mal? p.s. Désolé pour mon anglais.

+1

Le problème le plus probable est des espaces dans les valeurs de champ qui les rendent non unique –

+0

Rien à voir avec votre question, mais si vos données étaient plus normalisés, vous n'auriez pas à le traiter comme ça. Stocker les données séparées par des virgules dans une base de données relationnelle est presque toujours une mauvaise idée. – Corbin

Répondre

1

Je suggère une meilleure conception de base de données.

CREATE TABLE school (
    school_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(255) 
); 

CREATE TABLE station (
    station_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(255) 
); 

CREATE TABLE metro (
    school_id INT NOT NULL, 
    station_id INT NOT NULL, 
    UNIQUE INDEX (school_id, station_id) 
); 

Vous créez des écoles dans school et stations station. Lorsque vous devez lier une école à une station, vous ajoutez un enregistrement à metro. Cela rend le database normalized.

Lorsque vous avez besoin alors d'obtenir les stations, vous faites simplement:

SELECT station.* 
FROM metro 
INNER JOIN station 
ON metro.station_id = station.station_id 
WHERE metro.school_id = $school_id 
+0

Oui, c'est beaucoup mieux que moi, mais malheureusement, j'ai déjà écrit un code pour afficher, éditer et mettre à jour des formulaires pour les écoles.Il me faudra beaucoup de temps pour réécrire tout cela. – user1056252

+0

Cela prendra plus de temps lorsque vous devrez le réparer plus tard. Il est plus facile de résoudre un problème lorsque vous concevez, plus difficile de le réparer lorsque vous codez, beaucoup plus difficile lorsque vous avez déployé, et vraiment difficile quand vous devez entrer dans le code frais. Il est toujours préférable de corriger l'erreur dès que possible - plus vous la quittez, plus elle coûte cher en temps et en argent. –

2

Il y a un problème logique.
Strictement parlant, vous ne pouvez pas dire que "array_unique ne fonctionne pas". Tout simplement parce qu'il y a une douzaine d'autres fonctions impliquées.
Et vous n'avez aucune idée si cette fonction est fournie avec des données correctes. Vous devez apprendre pour déboguer votre code.
Ajoutez la sortie de débogage à votre code et vérifiez l'état de chaque variable pour voir si elle contient les données désirées.

début de var_dump($metro); à l'intérieur de la boucle

+0

Merci pour le conseil, il renvoie bool (false) – user1056252

+0

** à l'intérieur ** de la boucle, pas à l'extérieur! –

+0

oups, à l'intérieur de la boucle rien ne retourne – user1056252

Questions connexes