OVH Cloud OVH Cloud

explode chaine de "n" valeurs

15 réponses
Avatar
angelique
Bonjour,

J'aimerais récupérer tous les mots contenus dans une phrase par un
list() = explode(' ', $maphrase) en ne sachant pas à l'avance le
nombre de mots que contient cette phrase, donc je ne peux pas définir
les noms de mes variables récupérées par list().

Un exemple pour être plus claire (je sais bien que tout ceci peut vous
sembler confus).

Soit :
$maphrase = "vert jaune bleu";

Dans ce cas je sais qu'il y a 3 valeurs et je peux les récupérer de la
manière suivante :
list($couleur1,$couleur2,$couleur3) = explode(' ', $maphrase);

Mais lorsqu'on ne sait pas à l'avance combien de valeurs contient
$maphrase ?

Ca me paraissait tellement simple mais rien à faire ! bon, je suis un
peu débutante aussi, alors ceci explique peut être cela ;)

Merci merci

Angelica
http://www.angelica-fashion.com/goth_directory

10 réponses

1 2
Avatar
Etienne SOBOLE
"angelica" a écrit dans le message de news:

Dans ce cas je sais qu'il y a 3 valeurs et je peux les récupérer de la
manière suivante :
list($couleur1,$couleur2,$couleur3) = explode(' ', $maphrase);

Mais lorsqu'on ne sait pas à l'avance combien de valeurs contient
$maphrase ?


Ben faut pas utiliser list.
tu fais
$tMot = explode(' ', $maphrase);

puis tes mots seront dans
$tMot[0]
$tMot[1]
$tMot[2]
$tMot[3]
...
jusqu'au dernier mot...

Etienne

Avatar
CrazyCat
angelica wrote:

J'aimerais récupérer tous les mots contenus dans une phrase par un
list() = explode(' ', $maphrase) en ne sachant pas à l'avance le
nombre de mots que contient cette phrase, donc je ne peux pas définir
les noms de mes variables récupérées par list().
Soit :
$maphrase = "vert jaune bleu";
Dans ce cas je sais qu'il y a 3 valeurs et je peux les récupérer de la
manière suivante :
list($couleur1,$couleur2,$couleur3) = explode(' ', $maphrase);


C'est un problème assez récurent que celui la, et le mieux que tu
puisses faire est de ne pas utiliser list() mais plutot une petite
boucle qui te donnerais:
$maphrase = "couleur1 couleur2 couleur3 couleur4 couleur5 couleur6";
$test = explode(' ', $maphrase);
for ($i = 0; $i<count($test); $i++) {
$myvar = "couleur".$i;
$$myvar = $test[$i];
echo "$$myvar est ".$$myvar."<br>";
}


--
Tout sur les eggdrops
http://www.c-p-f.org
ML @

Avatar
Utilisateur_anonyme_et_non_membre_de_webatou.net
angelica wrote:

list($couleur1,$couleur2,$couleur3) = explode(' ', $maphrase);



essaie plutot un $list = explode(...);
suivi d'un simple foreach de manipilation de liste.



--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:

Avatar
Antoine Dinimant
Soit :
$maphrase = "vert jaune bleu";

Dans ce cas je sais qu'il y a 3 valeurs et je peux les récupérer de la
manière suivante :
list($couleur1,$couleur2,$couleur3) = explode(' ', $maphrase);


contente-toi de faire

$couleur = explode(' ', $maphrase);

tu as ainsi $couleur[0], $couleur[1], $couleur[2]... ce qui me semble
préférable dans tous les cas ! quand à ton nb d'éléments, ce sera
count($couleur)

juste pour la beauté de la chose, mais à mon sens ça n'a que des
inconvénients, tu peux ensuite créer tes variables $couleur1, $couleur2,
$couleur3 comme ça :

foreach( $couleur as $i => $val) {
$nomvar = 'couleur' . ($i + 1) ; // +1 pour démarrer de 1 au lieu de 0
$$nomvar = $val ;
}

en effet, en PHP les noms de variables peuvent être eux-mêmes variables,
d'où la syntaxe $$

Antoun

Avatar
Stephane Pineau
Le 24 May 2004 14:16:12 GMT, CrazyCat écrivait:

$maphrase = "couleur1 couleur2 couleur3 couleur4 couleur5 couleur6";
$test = explode(' ', $maphrase);
for ($i = 0; $i<count($test); $i++) {
$myvar = "couleur".$i;
$$myvar = $test[$i];
echo "$$myvar est ".$$myvar."<br>";


Très mauvaise idée (ou habitude plutôt)....

A partir du moment ou tu commences à numéroter une variable ayant le même
préfixe (et c'était le cas dans la question d'Angelica : $couleur1,
$couleur2, etc...), il faut tout de suite tiquer et te dire que tu fais
fausse route car tu es en train de recréer avec des variables dissociées un
simili-tableau, les facilités d'évolution, de manipulations (et
maintenance) offerte par celui-ci en moins bien sur....

La réponse (et elle à été données à un chouia près) c'est :

$Couleur=explode('', $maphrase);

Puis dans le reste du code utiliser à la place des variables $Couleur1,
$Couleur2 etc...

echo $Couleur[0];
echo $Couleur[1];

Etc....

Cdlt,
Stéph'






--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>

Avatar
CrazyCat
Stephane Pineau wrote:

$myvar = "couleur".$i;
$$myvar = $test[$i];
echo "$$myvar est ".$$myvar."<br>";
Très mauvaise idée (ou habitude plutôt)....

A partir du moment ou tu commences à numéroter une variable ayant le même
préfixe (et c'était le cas dans la question d'Angelica : $couleur1,
$couleur2, etc...), il faut tout de suite tiquer et te dire que tu fais
fausse route car tu es en train de recréer avec des variables dissociées un
simili-tableau, les facilités d'évolution, de manipulations (et
maintenance) offerte par celui-ci en moins bien sur....


Je sais bien que c'est une e(ho)rreur que d'utiliser cela, mais en fait
si je l'ai transmise, c'est surtout pour montrer comment on peut générer
des noms de variables dynamiques car c'est parfois utile.

Sinon, je suis d'accord à 100% avec le fait qu'utiliser un array est
bien plus pratique, mais l'exercice de style méritait le détour.

Et merci à John de pataper :)

--
Tout sur les eggdrops
http://www.c-p-f.org
ML @


Avatar
Olivier Miakinen
J'en rajoute une couche pour qu'Angelica soit bien convaincue...


[variables variables]

Très mauvaise idée (ou habitude plutôt)...


Tout-à-fait d'accord. La meilleure réponse a d'ailleurs été donnée par
Antoine Dinimant, qui comme les autres a expliqué que le tableau était
préférable, puis a expliqué comment faire des variables variables tout
en rappelant que cela n'avait que des inconvénients.

Avatar
John Gallet
Bonjour,

$myvar = "couleur".$i;
$$myvar = $test[$i];
echo "$$myvar est ".$$myvar."<br>";
Très mauvaise idée (ou habitude plutôt)....




Je n'en suis pas certain. En fait je n'ai pas le temps de m'amuser à
regarder la RFC "kivabien" mais je ne garantis vraiment pas que
l'utilisation de N variables qui ont toutes le même nom, avec des [] qui
plus est, est vraiment un cas prévu, documenté, et associé à un
comportement officiel de la part des navigateurs, tant en méthode GET
pour les liens http qu'en méthode Post.

Il me semble avoir souvenance d'une version d'Opéra qui n'aimait pas du
tout cette notation, mais je n'en mettrai pas ma main au feu. En tous
cas, les espaces dans les noms de variables, opéra n'aime pas du tout
(alors que IE et même mon bon vieux netscape 4.7x acceptent).

J'utilise personnellement plutôt la méthode de génération dynamique des
variables pour les raisons suivantes :

1) on est certains à **100%** que tous les navigateurs de la planète
**passés, présents, ou à venir** sauront les gérer. var1, var2...varN,
ça ne leur posera JAMAIS de problèmes. Et personnelleemnt, moins je
dépends du navigateur, mieux je me porte.
2) le côut à la génération du formulaire / lien est le même.
3) les données qui transitent entre le navigateur et le serveur sont les
mêmes.
4) le coût au traitement en retour est sensiblement le même si on garde
des traitements sur ${'var_'.$n} si ce n'est qu'on concatène une chaîne,
et si tu veux commencer par faire un for qui remplit un tableau tu
consommes deux fois la mémoire desdites variables (une fois dans les
variables, une fois dans le tableau).
5) la souplesse d'utilisation pour ce qu'on en fait en général est
suffisement proche de celle des tableaux pour ne pas avoir besoin de
faire cette recopie de toutes façons.
6) j'avoue que pour la facilité je passe souvent une variable
supplémentaire qui est le nombre de "cases" dans les deux cas (notation
tableau ou notation dynamique). Ca permet aussi de faire une
vérification de cohérence.

Donc si quelqu'un peut garantir que le traitement par les navigateurs de
plusieurs variables avec toutes le même nom, incluant des [ ], dans un
lien de type A HREF ou dans un transfert de type FORM est parfaitement
"gravé dans le marbre" officiellement, dans ce cas, je confirme qu'il
serait plus logique d'utiliser des tableaux. Jusque là, je continuerai à
utiliser l'un ou l'autre selon l'humeur du moment.

simili-tableau, les facilités d'évolution, de manipulations (et
maintenance) offerte par celui-ci en moins bien sur....



Maintenance ? Tu veux dire mise à jour ? Je ne vois pas de différence
entre $tab[$i]=.... et ${'tab'.$i}=... en facilité de mise à jour, mais
j'ai peut-êter compris de travers.

Je sais bien que c'est une e(ho)rreur que d'utiliser cela,


Je n'irai certainement pas hisser ce raccourci syntaxique au pinnacle
des méthodes de développement, mais ce n'est pas tant une horreur que ça
à mon sens.


Sinon, je suis d'accord à 100% avec le fait qu'utiliser un array est
bien plus pratique, mais l'exercice de style méritait le détour.


Bien plus pratique ? A part si on a besoin des fonctions disponibles sur
les tableaux, je ne vois pas en quoi. Et je me vois mal faire un
array_sort sur des choix dans un formulaire !

Et merci à John de pataper :)


J'ai dû louper un bout du film. Je n'ai jamais tapé sur cette méthode,
c'est même moi qui ai écrit le paragraphe correspondant de la FAQ.

a++
JG



Avatar
Antoine Dinimant
Très mauvaise idée (ou habitude plutôt)....




Je n'en suis pas certain. En fait je n'ai pas le temps de m'amuser à
regarder la RFC "kivabien" mais je ne garantis vraiment pas que
l'utilisation de N variables qui ont toutes le même nom, avec des [] qui
plus est, est vraiment un cas prévu, documenté, et associé à un
comportement officiel de la part des navigateurs, tant en méthode GET
pour les liens http qu'en méthode Post.


euh, nous parlions de variables PHP et non de formulaires HTML...



Avatar
Stephane Pineau
Le 25 May 2004 10:25:07 GMT, CrazyCat écrivait:


Je sais bien que c'est une e(ho)rreur que d'utiliser cela,


J'irais pas jusque là c'est bien pour ca que j'avais mis "une mauvaise
habitude"...:-),

mais en fait si je l'ai transmise, c'est surtout pour montrer comment on peut générer
des noms de variables dynamiques car c'est parfois utile.


Ma démarche est identique, mon post était n'était qu'un rappel à destination
d'Angelica et d'autres débutants (étant passé par là je sais que c'est le
genre de mauvaise habitude qui peut vite générer des erreurs difficilement
détectables (voir ma réponse à John).

J'ai profité de ton post uniquement comme exemple, ca n'étais pas une
critique le/te visant personnellement :-) Au contraire c'est très bien de
rapeller les différentes possibilités de Php, on en découvre tous les jours
même en pratiquant régulièrement (ce qui n'est plus mon cas).

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>

1 2