Sortir d'une chaîne, un nombre indéfini d'entrées.

Eléphanteau du PHP | 17 Messages

08 juin 2006, 01:26

Bonjour !

Encore une question toute bête pour les avertis, mais clée pour les débutants comme moi !

Voilà :
Je souhaite pouvoir afficher la liste des personnes qui ont ajoutés un membre de mon site, dans leur liste d'amis.
Pour cela j'ai créé une entrée "amis" dans mysql dans laquelle, pour chaque inscrit, est enregistré la liste de leurs amis sous la forme :
Jean Marc, Dominique, Pierre, Damien...

Afin d'afficher le nombre d'amis total pour un membre, je dois réussir à compter tous ces pseudos.
D'autre part, j'aimerais pouvoir les sortir de cette chaîne pour leur associer un lien pointant vers leur profil.

J'ai donc pensé à ça :

Code : Tout sélectionner

$source = "liste des amis, indéfini en nombre"; $ami = explode(", ", $source); echo $ami[0]; echo $ami[1];
Cela sépare bien chaque valeur.
Mais je ne sais pas d'avance combien d'amis sont enregistrés pour chaque membre donc je ne peux pas écrire indéfiniment :

Code : Tout sélectionner

echo $ami[0]; echo $ami[1]; echo $ami[2]; echo $ami[3]; echo $ami[4]; echo $ami[n+1];
Donc comment calculer le nombre d'amis (séparés par une virgule) dans la chaîne et utiliser ce numéro pour en extraire chaque ami au cas par cas ?!

Il doit y avoir une histoire de "boucle" pour éviter les répétitions... C'est une notion que je n'ai encore jamais rencontré, merci de bien vouloir détailler vos solutions pour que j'en comprenne le fonctionnement :)

Merci énormément à vous d'avance !

Eléphant du PHP | 451 Messages

08 juin 2006, 06:24

Donc comment calculer le nombre d'amis (séparés par une virgule) dans la chaîne et utiliser ce numéro pour en extraire chaque ami au cas par cas ?!
Ben en fait, il me semble plus simple de calculer le nombre d'amis à partir du tableau avec :
count($ami);
Il doit y avoir une histoire de "boucle" pour éviter les répétitions... C'est une notion que je n'ai encore jamais rencontré, merci de bien vouloir détailler vos solutions pour que j'en comprenne le fonctionnement :)
Mais encore mieux tu n'as pas besoin de compter avec une boucle foreach, essaye :
foreach ($ami as $nom_ami) {
  echo $nom_ami;
}
Autrement, la solution des amis séparés par une virgule dans une chaîne me semble risquée, si quelqu'un a beaucoup d'amis la chaîne va prendre beaucoup de place.
Je pense que j'aurais fait une table amis. Bien sur il faut que les membres du site est un id. Ca permet de faire une table :
IdMembre IdMembreAmi
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Eléphanteau du PHP | 17 Messages

09 juin 2006, 23:38

Voilà j'ai effectivement trouvé mon bonheur avec la fonction foreach !

Merci énormément à toi jpaul :)

Code : Tout sélectionner

if ($row_user['amis'] != "") { $amis = explode(", ", $row_user['amis']); foreach ( $amis as $amis ) { echo "<a href=\"profil.php?user=$amis\">$amis</a>\n"; } } else { echo "Bouh ! Ce membre n'a pas d'amis !"; }

Eléphant du PHP | 451 Messages

10 juin 2006, 13:36

Heu t'es sur :
foreach ( $amis as $amis)
Ca ne me serait pas venu de mettre le même nom de variable !
A mon avis les résultats sont imprévisibles...
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)