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?

Odpowiedzi:


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

Dokumenty rtrimtutaj


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");

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


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 = ",";
}

2

spójrz na funkcję rtrim

rtrim ($string , ",");

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



1

Wystarczyłoby proste wyrażenie regularne

$string = preg_replace("/,$/", "", $string)

2
Programista używa wyrażeń regularnych do rozwiązania problemu i teraz ma dwa problemy.
Sigurd


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,', ');

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.