jak usunąć przecinek z końca ciągu?

119

Chcę usunąć przecinek z końca ciągu. Tak jak teraz używam

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

ale to usuwa tylko ostatni znak ciągu. Dodaje ciąg dynamicznie, więc czasami na końcu ciągu nie ma przecinka. Jak mogę poprosić PHP o usunięcie przecinka z końca ciągu, jeśli taki znajduje się na końcu?

zeckdude
źródło

Odpowiedzi:

303
$string = rtrim($string, ',');

Dokumenty rtrimtutaj

Sigurd
źródło
27
Spowoduje to usunięcie wielu przecinków: „a, b ,,,” stanie się „a, b”. Czy tego chce OP, czy nie, nie wiem ...
Greg,
1
Dziękuję, robiłem to z substr, strlen, ... przez całe życie
Farhad
38

To klasyczne pytanie, z dwoma rozwiązaniami. Jeśli chcesz usunąć dokładnie jeden przecinek, który może się tam znajdować lub nie, użyj:

if (substr($string, -1, 1) == ',')
{
  $string = substr($string, 0, -1);
}

Jeśli chcesz usunąć wszystkie przecinki z końca wiersza, użyj prostszego:

$string = rtrim($string, ',');

Funkcja rtrim (i odpowiadająca jej ltrim dla left trim) jest bardzo przydatna, ponieważ możesz określić zakres znaków do usunięcia, tj. Aby usunąć przecinki i końcowe białe spacje, które napisałbyś:

$string = rtrim($string, ", \t\n");
Ben Russell
źródło
Dziękuję za szczegółowe wyjaśnienie. To wyjaśnia wszystko!
zeckdude
12

myślę, że konkatenujesz coś w pętli, na przykład

foreach($a as $b)
  $string .= $b . ',';

znacznie lepiej jest zebrać elementy w tablicy, a następnie połączyć ją z wymaganym separatorem

foreach($a as $b)
  $result[] = $b;

$result = implode(',', $result);

rozwiązuje to problemy z końcowymi i podwójnymi separatorami, które zwykle występują podczas łączenia

user187291
źródło
Dobry pomysł. Jednak nie wszystkie konkatenacje mogą mieć miejsce w PHP. W moim przypadku wysyłam połączony ciąg znaków JavaScript, aby PHP mógł je rozwiązać.
Sablefoste
4

Jeśli konkatenujesz coś w pętli, możesz to również zrobić w ten sposób:

$coma = "";
foreach($a as $b){
    $string .= $coma.$b;
    $coma = ",";
}
cesar.mi
źródło
2

spójrz na funkcję rtrim

rtrim ($string , ",");

powyższa linia usunie znak, jeśli ostatni znak jest przecinkiem

Anand Shah
źródło
1

Wystarczyłoby proste wyrażenie regularne

$string = preg_replace("/,$/", "", $string)
AlexWilson
źródło
2
Programista używa wyrażeń regularnych do rozwiązania problemu i teraz ma dwa problemy.
Sigurd
1

rtrim ($ string, ","); to najłatwiejszy sposób.

mepo
źródło
1

Miałem nieznośną „niewidzialną” spację na końcu struny i musiałem to zrobić

 $update_sql=rtrim(trim($update_sql),',');

Ale rozwiązanie powyżej jest lepsze

 $update_sql=rtrim($update_sql,', ');
zzapper
źródło
0

Poprzedź to:

if(substr($string, -1)==",")
Kaivosukeltaja
źródło