OVH Cloud OVH Cloud

Supprimer la , final

11 réponses
Avatar
Luc
Bonjour a tous,

Voici mon souci, je génère des numero séparé par des virgule, je dois
ensuite utiliser ces numero dans une requet, il faut obligatoirement que
cela soit sou la forme 1,2,3,4 et non 1,2,3,4, en fait c'est la ,
final que je cherche à éliminer.

j'utilise cela pour le faire :
substr_replace($text,'', strrpos($text,","));

est ce la bonne méthode ?

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.

Grand merci par avance pour vos réponses

10 réponses

1 2
Avatar
Stephane Pineau
Le 12 Jan 2005 16:50:48 GMT, Luc écrivait:
j'utilise cela pour le faire :
substr_replace($text,'', strrpos($text,","));

est ce la bonne méthode ?


Je mettrais un 7/10 rien que pour l'effort de ne pas nous avoir collé une
expression régulière pour faire ca:-))

Quelques méthodes :
La classique : attention normalement il faudrait tester si strlen($text)>0
$text=substr($text,0,strlen($text)-1)

et celle plus propre et qui permet de rapeller qu'une chaine peut être
traitée comme un tableau de caractères :
$text[strlen($text)-1]=chr(0);

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.


Si... mais tout dépends de ton algo de constitution de ta chaine. Ca demande
de rajouter un test de toute manière dans ta boucle. Mais retirer la
dernière virgule à la fin est à mon sens plus simple.


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

Avatar
Paul Delannoy
Luc a écrit:
Bonjour a tous,

Voici mon souci, je génère des numero séparé par des virgule, je dois
ensuite utiliser ces numero dans une requet, il faut obligatoirement que
cela soit sou la forme 1,2,3,4 et non 1,2,3,4, en fait c'est la ,
final que je cherche à éliminer.

j'utilise cela pour le faire :
substr_replace($text,'', strrpos($text,","));

est ce la bonne méthode ?


La peut être pas mais une surement

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.
Eh bien oui : arrete la boucle un carn plus tôt et réécrit

l'affectation une fois après la fin de la boucle, sans mettre de ,


Grand merci par avance pour vos réponses
de rien


Avatar
EspaceTrain
Bonsoir,

Quelques méthodes :
La classique : attention normalement il faudrait tester si
strlen($text)>0 $text=substr($text,0,strlen($text)-1)
et celle plus propre et qui permet de rapeller qu'une chaine peut être
traitée comme un tableau de caractères :
$text[strlen($text)-1]=chr(0);


Il y a plus simple si tu es en PHP 4.1.0. ou supérieur :

Après la boucle, tu peux utiliser rtrim()
http://fr2.php.net/manual/fr/function.rtrim.php

$text = rtrim($text, ",");

Simple et efficace.

--
EspaceTrain
Prochain arrêt : Mars
Merci de ne laisser aucuns bagages dans les voitures

Avatar
Vincent Lascaux
et celle plus propre et qui permet de rapeller qu'une chaine peut être
traitée comme un tableau de caractères :
$text[strlen($text)-1]=chr(0);


Etant donné qu'une chaine en PHP peut contenir des données binaires, je
doute que ce que tu as écrit fasse ce qu'il faut (en particulier, ca
m'ettonerait qu'apres cette ligne strlen($text) ait changé)

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.


Si... mais tout dépends de ton algo de constitution de ta chaine. Ca
demande
de rajouter un test de toute manière dans ta boucle. Mais retirer la
dernière virgule à la fin est à mon sens plus simple.


Une astuce que j'aime bien c'est

$separateur = "";
for($i=0; $i<5; $i++)
{
$ligne .= $separateur.$i;
$separateur = ","
}

--
Vincent


Avatar
Marc

et celle plus propre et qui permet de rapeller qu'une chaine peut être
traitée comme un tableau de caractères :
$text[strlen($text)-1]=chr(0);



attention, il reste des caractères résiduels dans la chaine.
D'autre part, php gere des chaines de type binaire. Il ne connait
pas spécialement la notion de chaine ascii. Pour lui tout ce qui
est dans une chaine est affichable. La preuve :

<?php

error_reporting(E_ALL);

$str = '';
for($i=0;$i<10;$i++){
$str .= "";
}

$str .= "fun chars";

echo "str = $strn";
echo "len = " . strlen($str) . "n";


?>



[ news]$ php null-char.php
str = fun chars
len = 19
[ news]$ php null-char.php | od -xc
0000000 7473 2072 203d 0000 0000 0000 0000 0000
s t r =
0000020 7566 206e 6863 7261 0a73 656c 206e 203d
f u n c h a r s n l e n 0000040 3931 000a
1 9 n
0000043

Avatar
Luc
Bonjour a tous,

Voici mon souci, je génère des numero séparé par des virgule, je dois
ensuite utiliser ces numero dans une requet, il faut obligatoirement que
cela soit sou la forme 1,2,3,4 et non 1,2,3,4, en fait c'est la ,
final que je cherche à éliminer.

j'utilise cela pour le faire :
substr_replace($text,'', strrpos($text,","));

est ce la bonne méthode ?

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.

Grand merci par avance pour vos réponses


Merci à tous pour votre aide ;) j'en apprend beaucoup à chaque fois .
je cherche constament à optimiser mon code , donc vos multiples
solutions sont du pain béni pour moi ; )

Luc

Avatar
Philippe Chaissac
Bonjour a tous,

Voici mon souci, je génère des numero séparé par des virgule, je dois
ensuite utiliser ces numero dans une requet, il faut obligatoirement que
cela soit sou la forme 1,2,3,4 et non 1,2,3,4, en fait c'est la ,
final que je cherche à éliminer.

j'utilise cela pour le faire :
substr_replace($text,'', strrpos($text,","));

est ce la bonne méthode ?

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.


Une méthode que j'aime bien perso : au lieu de construire la chaine dans
la boucle, on alimente un tableau et ensuite on l'"implode". Exemple :

$tableau=array();
for (...) {
...
$tableau[]Î_que_l_on_veut;
};

La éventuellement, on peut trier, etc.
et après la boucle, on fait un joli :
$chaine = implode(", ",$tableau);
Et hop !

Avatar
loufoque
Stephane Pineau a dit le 12/01/2005 23:15:

Quelques méthodes :
La classique : attention normalement il faudrait tester si strlen($text)>0
$text=substr($text,0,strlen($text)-1)


$text = substr($text, 0, -1);


et celle plus propre et qui permet de rapeller qu'une chaine peut être
traitée comme un tableau de caractères :
$text[strlen($text)-1]=chr(0);


Ce serait plutôt avec { } qu'avec [ ] en fait.

Avatar
CrazyCat
Luc wrote:
j'utilise cela pour le faire :
substr_replace($text,'', strrpos($text,","));
est ce la bonne méthode ?


A priori, oui

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.


Tout dépend de la boucle qui permet de générer ta chaine, mais ces
méthodes seront toujours plus lourdes.
Si le nombre d'éléments est connu, tu peux utiliser un compteur qui va
faire varier la chaine ajoutée, par exemple:
<?
// les variables sont dans le tableau $tabvar
for ($i=0; $i<count($tabvar); $i++) {
if ($i<(count($tabvar)-1)) {
$chaine .= "$i,";
} else {
$chaine .= $i;
}
}
?>

Autre possibilité, c'est de fonctionner à l'inverse, à savoir ajouter la
virgule avant la variable, mais il te faut alors une variable toujours
présente, ce qui donnerait:
<?
$chaine = "1";
for ($i=0; $i<count($tabvar); $i++) {
$chaine .= ",$i";
}
?>

Mais sans plus d'éléments, je te conseille ta méthode originelle.


--
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net
Tout sur les eggdrops: http://www.c-p-f.org

Avatar
Vincent Jacques
Voici mon souci, je génère des numero séparé par des virgule, je dois
ensuite utiliser ces numero dans une requet, il faut obligatoirement que
cela soit sou la forme 1,2,3,4 et non 1,2,3,4, en fait c'est la ,
final que je cherche à éliminer.

Sinon n'y aurais t'il pas une astuces a faire dans la boucle pour éviter
d'avoir cette virgule final.


$str="1";
for($i;2;$N)
$str=$str.",".$i;

à la syntaxe pres, et à ma compréhensions du problème pres également

--
Vincent Jacques

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème."
Devise Shadok

1 2