[PHP] - Fonction explode et une boucle

Résolu/Fermé
Bobox87 - 26 sept. 2010 à 15:48
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 - 26 sept. 2010 à 17:43
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)

$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>,&nbsp;</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:

4 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 sept. 2010 à 17:26
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>,&nbsp;</p>';
         }
}
else
{
    echo '<p>'.$donnees["membre_pseudo"].' n\'a pas encore ajouté de produits à ses favoris</p>';
}
?> 
1
<?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...
0
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 1
26 sept. 2010 à 17:02
Merci pour ton aide mais là ça m'affiche le résultat comme un array, je veux dire comme ça:

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 ?
0
bobox87 Messages postés 32 Date d'inscription lundi 6 septembre 2010 Statut Membre Dernière intervention 25 juillet 2011 1
26 sept. 2010 à 17:43
Un grand merci pour ta contribution Alain_42 (et merci à Siluni aussi)

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>,&nbsp;';
	}
        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 !
0