[PHP/MySQL] Parser le résultat d'une BDD

Nouveau WRInaute
Bonjour à tous !

Voilà, j'ai une base de données avec, dedans, un champ "theme". Parfois, ce champ contient plusieurs mots. Les thèmes sont classés comme suit : theme1,theme2,theme3,... etc.

Je précise bien qu'ils sont comme cela dans la base...

Je voudrais les extraire et en faire une liste sur une page. S'il n'y avait qu'un seul thème à chaque fois, ça ne poserait aucun souci ! Mais là, je voudrais non seulement qu'il me les sépare s'il y en a plusieurs dans un même champ, et en plus qu'il ne me les répète pas (si par exemple j'ai un champ Theme1,Theme2 et un autre champ Theme2, j'aimerais qu'il ne me répète pas ce dernier puisqu'il est présent dans Theme1,Theme2).

Je ne sais pas du tout comment m'y prendre... J'ai bien essayé quelques petites manipulations avec les fonctions ereg (pour vérifier s'il y a ou non une virgule), explode pour parser le résultat... Mais rien à faire, je n'obtiens pas ce que je veux :( .

Voici le code que j'ai bricolé, mais j'ai l'impression que je ne m'y prends pas du tout comme il faut ;)
Code:
			$req=mysql_query("SELECT DISTINCT theme FROM table ORDER BY theme") or die ("Erreur de connexion a la BDD : ".mysql_error());
			echo "<ul>";
			$j=0;
			while ($resultat=mysql_fetch_array($req)) {
			$string[$j]=ereg(",",$resultat["theme"]);
				if ($string[$j]) {
					$resultat["theme"]=explode(",",$resultat["theme"]);
					$i=0;
					while($resultat["theme"][$i]) {
						echo "<li><a href='carte.php?theme=".$resultat["theme"][$i]."'>".$resultat["theme"][$i]."</a></li>";
					$i++;
					}
				} else {
					echo "<li><a href='carte.php?theme=".$resultat["theme"][$i]."'>".$resultat["theme"][$i]."</a></li>";
				}
			}
			echo "</ul>";

Merci d'avance !! :)
 
WRInaute occasionnel
Je te conseille de séparer l'extraction et homogénéisation des données de la partie affichage.

Avec des if !in_array , tu devrais t'en sortir
 
Nouveau WRInaute
Merci pour ta réponse :) !
Alors, en faisant un test (avec un seul tableau, sans base de données pour commencer) avec ceci :

Code:
$var="theme1,theme2,theme3,theme4,theme1";
$var=explode(",",$var);

$tabl=array();

$i=0;
while ($var[$i]) {
	if (!in_array($var[$i],$tabl)) {
		array_push($tabl,$var[$i]);
		echo $var[$i];
	}
$i++;
}

J'obtiens effectivement ce que je veux.
Sauf que j'ai droit à un "Notice: Undefined offset: 5 in c:\program files\easyphp1-8\www\api googlemap\test.php on line 29" (normal me direz-vous ;) ).
Je ne vois pas comment ne pas l'avoir... Comment écrire la même chose avec foreach ?

(le code suivant ne me renvoie que la première entrée du tableau :
Code:
foreach ($var as $value) {
	if (!in_array($var,$tabl)) {
		array_push($tabl,$var);
		echo $value;
	}
$i++;
}

Edit : en rajoutant un "isset" devant ma variable, dans le while, ça marche... Mouais, mais j'ai pas l'impression de faire les choses proprement ;) je suis toujours ouvert à tout éclairage de PHP possible ;)
 
WRInaute discret
moi je ferai

$data1="theme1,theme2,theme3";
$data2="theme5,theme2";

$tab_of_themes = array_unique(array_merge(explode(',',$data1),explode(',',$data2)));


Normalement c'est juste mais ca depend de comment tu traite les données ensuite.
 
Discussions similaires
Haut