PHP - chaine + split

Résolu
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -  
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit problème a l'utilisation de split :

j'ai une chaine type : $chaine="toto 2 tata, tutu 1 test,"

Je souhaite récuperer chaque mot ou nombre séparemant je comment :

//Traitement des statisques des joueur
$string = split(',', $chaine); 
$taille=sizeof($string);
$i="1";
while( $i < $taille ) {
	$stat=$string["$i"];
	$chaine = split(' ', $stats); 
	$a=$chaine[1];
	$b=$chaine[2];
	$c=$chaine[3];
}


Mon premier split sépare bien les expresion a chaque "," mais le seconde ne marche pas du tout j'ai voulou utilisé str_replace croyant que cela venait des espace mais pas mieux mon tableau contient aucune donné.

Avez vous une idée ?

Merci
A voir également:

11 réponses

biboo_ Messages postés 1249 Date d'inscription   Statut Membre Dernière intervention   106
 
Enlève les guillemets avec ton $i="1", même si le php est un langage très peu typé..
0
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
Hello,
j'ai envie de dire que c'est une bête faute de frappe, mais ça va peut-être plus loin :P

-> Je ne comprends pas à quoi sert ton while. Il manque une instruction pour modifier $i ? Dans ce cas, une boucle for ne serait-elle pas plus adaptée ?

-> Tu réutilises la variable $chaine. Ce n'est pas une erreur, mais une belle source de confusions. Surtout quand tu reprends ton code après quelques jours de pause ! On n'est vraiment pas à une variable près, autant bien clarifier les choses.

-> Que vois-je ici ? o_O
	$stat=$string["$i"];
	$chaine = split(' ', $stats);
	                          ^
Bref, voilà ;)
0
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
Effectivement je suis tromper en ré-écrivant mon code mais ma source est bonne ;-) (le nom de variable stat et le $i++ pour le while)

j'ai le message suivante en faite :

Notice: Undefined offset: 1 in line 42

Notice: Undefined offset: 2 in line 43

Notice: Undefined offset: 3 in line 44

ce qui correspond a mes :
$a=$chaine[1];
$b=$chaine[2];
$c=$chaine[3];

J'ai enlever les guillemets sans succès.

J'ai l'impression que le problème viens de la boucle, je réutilise la même variable $chaine car les action après son lié insertion en bdd, j'ai pas penser faire autrement pour être franc :-)
0
biboo_ Messages postés 1249 Date d'inscription   Statut Membre Dernière intervention   106
 
Mettre $i="1", puis mettre $i++..
Je comprends bien qu'il s'agit du php.. mais au secours pas ce genre de choses quoi!! :D
0
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
salut biboo_,

Je suis débutant et je fais plein d'erreur et surement des usine a gaz pour rien mais que me propose tu ?

a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
biboo_ Messages postés 1249 Date d'inscription   Statut Membre Dernière intervention   106
 
Non c'est pas mal, c'est juste certaines pratiques à.. régulariser. :)
Genre si tu fais $i++, $i est un entier, donc déclare-le en entier et non en String. ;)
0
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
Oki je corrige ce point, j'avais pas fait attention ;-), je viens de faire un test sans faire une boucle sur un seul cas et ça marche est-il déconseiller d'utiliser split dans une boucle ?
0
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
Je viens de test avec une boucle for et toujours pas mieux :

$string = split(',', $chaine); 
$taille=sizeof($string);

for($i=0;$i < $taille;$i++) {
	$stat=$string["$i"];
	$chaine = split(' ', $stats); 
	$a=$chaine[1];
	$b=$chaine[2];
	$c=$chaine[3];
}
0
biboo_ Messages postés 1249 Date d'inscription   Statut Membre Dernière intervention   106
 
Essaie ça :
$string = split(',', $chaine); 
$taille=sizeof($string);
$chaine = array();
for($i=0;$i < $taille;$i++) {
	$stat=$string[$i];
	$chaine = split(' ', $stats); 
	$a=$chaine[1];
	$b=$chaine[2];
	$c=$chaine[3];

}


Tu en fais quoi de tes variables $a $b $c après?
0
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
Il y a du mieux au niveau boucle je vois apparaitre chaque traitement qui est fait par contre toujours la même erreur sur le deuxième split ma chaine est vide

quand je vais un echo de $chaine j'ai "Array".
0
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
Re !
(http://fr2.php.net/manual/fr/function.split.php)
Split appelle un moteur de regexp pour faire son traitement, tu n’en as pas besoin ici. Essaye plutôt explode.
Et pour le code, j’avais pas trop le temps tout à l’heure mais je reviens à la charge avec cette version :

$string = explode(',', $chaine); 
$taille = sizeof($string);
for ($i=0; $i<$taille; $i++) {
	$stat = $string[$i];
	$mots = explode(' ', $stat);		// nouvelle variable
	$a = $mots[0];		// le 1er index d’un tableau est 0 !
	$b = $mots[1];
	$c = $mots[2];
	/*
	 * traitement de $a, $b et $c
	 * …
	 */
}
0
wapette21 Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   5
 
Salut a vous,

Super le explode de Groarh, marche très bien, problème résolue.

Merci a vous tous.

a++
0