Problème avec un explode

Alexandre_Sceptique
Invité n'ayant pas de compte PHPfrance

16 mars 2009, 21:53

Bonsoir,

Je souhaiterai décomposer une chaîne de caractères avec deux séparateurs : *** puis ,.

Exemple de chaîne : http://www.monsite.com/gallery/paris.jp ... n.jpg,Lyon

En gros, il s'agit de tirer au sort une image dans une liste et de provoquer son affichage dans une page en partant de son Url et de son titre. Je pense que c'est plutôt simple comme exercice.

Seulement, je me heurte au problème de l'explode qui ne fonctionne pas.

Voici mon code :
$number = 2;
//Ici, je spécifie le nombre d'images attendues avant leur tirage au sort
$string = 'http://www.monsite.com/gallery/paris.jpg,Paris***http://www.monsite.com/gallery/lyon.jpg,Lyon,***http://www.monsite.com/gallery/marseille.jpg,marseille***http://www.monsite.com/gallery/lille.jpg,Lille';
// Ici, je veux scinder les deux chaînes en utilisant le séparateur *** puis scinder la sous chaîne en utilisant le séparateur ,
$images = explode("***", $string);
// A priori, ici les chaînes sont séparées
foreach($images as $image) {
list($url, $title) = explode(",", $image);
// Là, je mets l'explode sur la virgule pour séparer l'Url de l'adresse
$gallery = '<li><img src="'.$url.'" alt="'.$title.'" title="'.$title.'" /></a></li>';
}
// Je place cette image dans une liste, plus élégante en Html !!!
echo $gallery[rand (0, $number)];;
Hélas, ça me renvoue une chaîne vide !!!

Auriez-vous une idée ?

Je planche depuis des heures sur ce problème, sans trouver de solution...

Merci pour votre aide.

Alexandre

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 mars 2009, 22:48

Ta variable $gallery est une chaine de caractère que tu écrases à chaque itération de ton foreach. Résultat, au final elle ne contiendra que la dernière image, mais surtout, ça reste une chaine et pas un tableau.

Tu ne peux donc pas faire appel à un $gallery[xxx] ...

Il te faut donc modifier ton code pour en faire un tableau, et pouvoir l'exploiter avec ton rand :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1996 Messages

17 mars 2009, 11:17

Ajuste $gallery en tableau :
$gallery = '<li><img src="'.$url.'" alt="'.$title.'" title="'.$title.'" /></a></li>'; 
en
$gallery = array();
foreach($images as $image) {
list($url, $title) = explode(",", $image);
// Là, je mets l'explode sur la virgule pour séparer l'Url de l'adresse
$gallery[] = '<li><img src="'.$url.'" alt="'.$title.'" title="'.$title.'" /></a></li>';
} 
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Alexandre_Sceptique
Invité n'ayant pas de compte PHPfrance

17 mars 2009, 15:41

Bonjour,

Merci à vous deux... J'avais trouvé une solution de mon côté en utilisant un array_push. Je délcare un array() avant le premier explode et je remplis le tableau à la fin de la boucle avec array_push.

Néanmoins, je vais tester la proposition d'Auresms.

Encore merci !

Alexandre

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 mars 2009, 16:34

C'est la même chose ;)
int array_push ( array &$array , mixed $var [, mixed $... ] )

array_push() considère array comme une pile, et empile les variables var , ... à la fin de array . La longueur du tableau array augmente d'autant.
Cela a le même effet que :
<?php
$array[] = $var;
?> 
répété pour chaque var .
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...