Page 1 sur 1

Problème avec un explode

Posté : 16 mars 2009, 21:53
par Alexandre_Sceptique
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

Posté : 16 mars 2009, 22:48
par Ryle
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 :)

Posté : 17 mars 2009, 11:17
par Aureusms
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>';
} 

Posté : 17 mars 2009, 15:41
par Alexandre_Sceptique
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

Posté : 17 mars 2009, 16:34
par Ryle
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 .