[PHP] - Fonction explode et une boucle
Résolu
Bobox87
-
bobox87 Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
bobox87 Messages postés 32 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà j'aimerais afficher la liste des produits favoris d'un utilisateur avec un lien cliquable sur chaque produit présent dans cette liste. Dans ma bdd, le système de favoris est géré par un champ text. Je m'explique, à chaque fois qu'un membre ajoute un produits à ses favoris, ce champ text est mis a jour de la manière suivante:
produit_id|produit_nom|
Ce qui donne par exemple: 1|tomate|16|fraise| ...et ainsi de suite
J'ai consulté la doc php sur la fonction explode et j'ai mis en place ce code qui marche très bien... mais que pour un seul élément (logique il n'y a pas de boucle)
J'ai essayé différents trucs pour créer une boucle avec for ou foreach mais malheureusement je n'arrive pas à trouver la solution en utilisant list. Alors si quelqu'un peut me filer un coup de main ce sera pas de refus =)
Voilà j'aimerais afficher la liste des produits favoris d'un utilisateur avec un lien cliquable sur chaque produit présent dans cette liste. Dans ma bdd, le système de favoris est géré par un champ text. Je m'explique, à chaque fois qu'un membre ajoute un produits à ses favoris, ce champ text est mis a jour de la manière suivante:
produit_id|produit_nom|
Ce qui donne par exemple: 1|tomate|16|fraise| ...et ainsi de suite
J'ai consulté la doc php sur la fonction explode et j'ai mis en place ce code qui marche très bien... mais que pour un seul élément (logique il n'y a pas de boucle)
$liste_produits = $donnees['membre_produit_favoris']; list($id, $nom) = explode("|", $liste_produits); // Si le membre a des produits dans ses favoris if ($liste_produits != "") { echo '<p><a href="../produits/produit.php?id='.$id.'">'.$nom.'</a>, </p>'; } else { echo '<p>'.$donnees["membre_pseudo"].' n\'a pas encore ajouté de produits à ses favoris</p>'; }
J'ai essayé différents trucs pour créer une boucle avec for ou foreach mais malheureusement je n'arrive pas à trouver la solution en utilisant list. Alors si quelqu'un peut me filer un coup de main ce sera pas de refus =)
A voir également:
- [PHP] - Fonction explode et une boucle
- Fonction si et - Guide
- Easy php - Télécharger - Divers Web & Internet
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
4 réponses
une autre solution:
<?php $val='1|tomate|16|fraise'; $array_val = explode('|', $val); $array_produits = array(); for($a=0; a<count($array_val); $a+=2){ $array_produits [$array_val[$a]] = $array_val[$a+1]; //la on stockes dans l'array_produits l'index de l'array=id_produit donc la premiere valeur et comme valeur à cet index la deuxième valeur //exemple: $array_produits [1]=tomate $array_produits [16]=fraise } //affichage des liens: // Si le membre a des produits dans ses favoris if (count($array_val)>0) { // boucle sur l'array_produits foreach ($array_produits as $id=>$nom){ echo '<p><a href="../produits/produit.php?id='.$id.'">'.$nom.'</a>, </p>'; } } else { echo '<p>'.$donnees["membre_pseudo"].' n\'a pas encore ajouté de produits à ses favoris</p>'; } ?>
<?php
$var = explode('|', $array);
$produit = array();
for($a=0; a<count($var); $a+=2){
$produit[] = array($var[$a], $var[$a+1]);
}
print_r($produit);
?>
Le mieux aurai été de différenciez les éléments entre eux.
séparateur d'article | séparateur de quantité * par exemple
1*tomate|16*fraise etc...
$var = explode('|', $array);
$produit = array();
for($a=0; a<count($var); $a+=2){
$produit[] = array($var[$a], $var[$a+1]);
}
print_r($produit);
?>
Le mieux aurai été de différenciez les éléments entre eux.
séparateur d'article | séparateur de quantité * par exemple
1*tomate|16*fraise etc...
Merci pour ton aide mais là ça m'affiche le résultat comme un array, je veux dire comme ça:
Moi je voudrais afficher chaque résultat dans un paragraphe. En fait j'ai repris cet exemple là sur php.net
Mais comment faire pour gérer ça avec une boucle ?
Array ( [0] => one [1] => two [2] => three )
Moi je voudrais afficher chaque résultat dans un paragraphe. En fait j'ai repris cet exemple là sur php.net
// Exemple 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo $user; // foo echo $pass; // *
Mais comment faire pour gérer ça avec une boucle ?
Un grand merci pour ta contribution Alain_42 (et merci à Siluni aussi)
Voilà mon code qui marche:
Il y a quelques subtilités encore nouvelles pour moi mais je vais décortiquer tout ça et rajouter des commentaires pour bien m'en rappeler.
Encore merci à vous deux !
Voilà mon code qui marche:
$val = $donnees['membre_produit_favoris']; $array_val = explode('|', $val); $array_produits = array(); for($a=0; $a<count($array_val) - 1; $a+=2) { $array_produits[$array_val[$a]] = $array_val[$a+1]; } //la on stockes dans l'array_produits l'index de l'array=id_produit donc la premiere valeur et comme valeur à cet index la deuxième valeur //exemple: $array_produits [1]=tomate $array_produits [16]=fraise // Si le membre a des produits dans ses favoris if ($val != "") { echo '<p>'; // boucle sur l'array_produits foreach ($array_produits as $id=>$nom) { echo '<a href="../produits/produit.php?id='.$id.'">'.$nom.'</a>, '; } echo '</p>'; } else { echo '<p>'.$donnees["membre_pseudo"].' n\'a pas encore ajouté de produits à ses favoris</p>'; }
Il y a quelques subtilités encore nouvelles pour moi mais je vais décortiquer tout ça et rajouter des commentaires pour bien m'en rappeler.
Encore merci à vous deux !