как удалить последний символ строки/укоротить строку
Функция mb_substr() возвращает подстроку первого аргумента, в качестве второго аргумента передается позиция откуда начинается подстрока (в нашем случае начало), а в качестве второго — длина подстроки (текущая длина строки минус один символ).
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.13.43305
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Технарь
Блог о программировании и околопрограммерских штуках.
Удаление последнего символа на PHP
Удаление последнего символа в строке
Удаление последних N — символов
Получение последнего символа:
Проверить находится ли в конце строки определенный символ и удалить его:
Описание функции: substr
substr() возвращает подстроку строки string длиной length, начинающегося с start символа по счету.
rtrim
Эта функция возвращает строку string с удалёнными из конца строки пробельными (или другими) символами.
Список параметров
С помощью параметра characters можно также указать удаляемые символы. Просто перечислите все символы, которые вы хотите удалить. Можно указать конструкцию .. для обозначения диапазона символов.
Возвращаемые значения
Возвращает модифицированную строку.
Примеры
Пример #1 Пример использования rtrim()
$text = «\t\tThese are a few words 🙂 . » ;
$binary = «\x09Example string\x0A» ;
$hello = «Hello World» ;
var_dump ( $text , $binary , $hello );
$trimmed = rtrim ( $text );
var_dump ( $trimmed );
$trimmed = rtrim ( $text , » \t.» );
var_dump ( $trimmed );
$trimmed = rtrim ( $hello , «Hdle» );
var_dump ( $trimmed );
// удаляем управляющие ASCII-символы с конца $binary
// (от 0 до 31 включительно)
$clean = rtrim ( $binary , «\x00..\x1F» );
var_dump ( $clean );
Результат выполнения данного примера:
Смотрите также
- trim() — Удаляет пробелы (или другие символы) из начала и конца строки
- ltrim() — Удаляет пробелы (или другие символы) из начала строки
User Contributed Notes 14 notes
I have an obsessive love for php’s array functions given how extremely easy they’ve made complex string handling for me in various situations. so, have another string-rtrim() variant:
function strrtrim ( $message , $strip ) <
// break message apart by strip string
$lines = explode ( $strip , $message );
$last = » ;
// pop off empty strings at the end
do <
$last = array_pop ( $lines );
> while (empty( $last ) && ( count ( $lines )));
// re-assemble what remains
return implode ( $strip , array_merge ( $lines , array( $last )));
>
?>
Astonishingly, something I didn’t expect, but: It completely compares to harmor’s rstrtrim below, execution time wise. o_o Whee!
True, the Perl chomp() will only trim newline characters. There is, however, the Perl chop() function which is pretty much identical to the PHP rtrim()
Here’s a quick way to recursively trim every element of an array, useful after the file() function :
<?php
# Reads /etc/passwd file an trims newlines on each entry
$aFileContent = file ( «/etc/passwd» );
foreach ( $aFileContent as $sKey => $sValue ) <
$aFileContent [ $sKey ] = rtrim ( $sValue );
>
I needed a way to trim all white space and then a few chosen strings from the end of a string. So I wrote this class to reuse when stuff needs to be trimmed.
function cleaner ( $cuts , $pinfo ) <
$ucut = «0» ;
$lcut = «0» ;
while ( $cuts [ $ucut ]) <
$lcut ++;
$ucut ++;
>
$lcut = $lcut — 1 ;
$ucut = «0» ;
$rcut = «0» ;
$wiy = «start» ;
if (! $cuts [ $ucut ]) <
$so = «restart» ;
> else <
$pinfo = rtrim ( $pinfo );
$bpinfol = strlen ( $pinfo );
$tcut = $cuts [ $ucut ];
$pinfo = rtrim ( $pinfo , » $tcut » );
$pinfol = strlen ( $pinfo );
if ( $bpinfol == $pinfol ) <
$rcut ++;
if ( $rcut == $lcut ) <
unset( $wiy );
>
$ucut ++;
> else <
$so = «restart» ;
>
>
>
$this -> cleaner = $pinfo ;
>
$pinfo = new cleaner ( $cuts , $pinfo );
$pinfo = $pinfo -> cleaner ;
?>
That class will take any string that you put in the $cust array and remove it from the end of the $pinfo string. It’s useful for cleaning up comments, articles, or mail that users post to your site, making it so there’s no extra blank space or blank lines.
On the recurring subject of string-stripping instead of character-stripping rtrim() implementations. the simplest (with a caveat) is probably the basename() function. It has a second parameter that functions as a right-trim using whole strings:
echo basename ( ‘MooFoo’ , ‘Foo’ );
Since it also strips anything that looks like a directory, it’s not quite identical with hacking a string off the end:
echo basename ( ‘Zoo/MooFoo’ , ‘Foo’ );
But sometimes it gets the job done.
I’m sure there’s a better way to strip strings from the end of strings.
<?php
/**
* Strip a string from the end of a string
*
* @param string $str the input string
* @param string $remove OPTIONAL string to remove
*
* @return string the modified string
*/
function rstrtrim ( $str , $remove = null )
<
$str = (string) $str ;
$remove = (string) $remove ;
if(empty( $remove ))
<
return rtrim ( $str );
>
$len = strlen ( $remove );
$offset = strlen ( $str )- $len ;
while( $offset > 0 && $offset == strpos ( $str , $remove , $offset ))
<
$str = substr ( $str , 0 , $offset );
$offset = strlen ( $str )- $len ;
>
return rtrim ( $str );
> //End of function rstrtrim($str, $remove=null)
echo rstrtrim ( ‘Hello World. ‘ , ‘!’ ) . ‘<br />’ ; //»Hello World»
echo rstrtrim ( ‘Hello World. ‘ , ‘!!’ ) . ‘<br />’ ; //»Hello World!»
echo rstrtrim ( ‘Hello World. ‘ , ‘. ‘ ) . ‘<br />’ ; //»Hello World»
echo rstrtrim ( ‘Hello World. ‘ , ‘. ‘ ). ‘<br />’ ; //»Hello World. »
?>
function read_more($in,$len=160) <
if(strlen($in)>$len) <
return preg_replace(‘/[\s\.,][^\s\.,]*$/u’, », substr($in, 0, $len)).’. ‘;
>else <
return $in;
>
>
echo read_mode(«Lorem ipsum dolor sit amet, consectetur adipisicing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque aliquet tellus. Phasellus pharetra nulla ac diam. Quisque semper justo at risus. Donec venenatis, turpis vel hendrerit interdum, dui ligula ultricies purus, sed posuere libero dui id orci.»);
/* Output:
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Proin nibh augue, suscipit a, scelerisque sed, lacinia in, mi. Cras vel lorem. Etiam pellentesque. */
To remove an unwanted character — example «.» — if exist or not.
The example above doesn’t include the case where there is no «.»
If there is not «.» at the example above the last word will be deleted.
Have fun with this code.
<?php
$text = «This string contains. some unwanted characters on the end .» ;
$text = trim ( $text );
$last = $text < strlen ( $text )- 1 >;
if (! strcmp ( $last , «.» ))
<
$text = rtrim ( $text , ‘a..z’ );
$text = rtrim ( $text , ‘.’ );
>
?>
Trim limit would be really helpfull. I made a little helper function to do a rtrim with a limited number of replaces:
<?php
function rtrim_limit ( $str , $delim , $count = 0 )
<
if ( $count == 0 ) return rtrim ( $str , $delim );
$l = strlen ( $delim );
$k = 0 ;
while ( substr ( $str , — $l ) == $delim && ( $count == 0 || ( $count > 0 && $k ++ < $count ))) <
$str = substr ( $str , 0 , strlen ( $str ) — $l );
>
Удаление последнего символа в строке через PHP
Все передаваемые в переменных значения имеют разный вид хранения и распределения – речь идёт о числах, объектах, массивах и прочих видах размещения информации, таких как строках. В роли последней может выступать комбинация любых символов, включая цифры, заключённая в кавычки. С ней можно производить различные действия, одним из самых простых среди которых является удаление знаков.
С помощью rtrim();
Данный вариант – отличный способ, в PHP 7 не требующий написания собственной функции. Предполагается, что при написании кода программист сам укажет, какой знак должен быть удалён. То есть, привязка идёт не к позиции символа относительно начала слова, а к нему самому.
Очевидный минус – исчезновение всех одинаковых знаков в строке, однако этот недостаток нивелируется, если предложенный к удалению символ встречается в тексте, предложении, слове всего один раз.
К плюсам можно отнести несложный синтаксис и, соответственно, лёгкую запоминаемость:
С помощью регулярных выражений
Эффект, который даст код, основанный на регулярных выражениях, примерно таков же, как в вышерассмотренном случае. Однако следует помнить, что скорость выполнения у regexвсегда медленнее, чем у функций.
Использование этого метода в небольшом количестве не приведёт к ощутимым задержкам, но всё же нежелательно. Особенно не рекомендуется задействовать решение в продакшн-коде, но для понимания принципа regexон вполне подойдёт.
Альтернативный вариант
Если неизвестно, какой именно знак окажется последним, можно также использовать регулярные выражения. Но куда лучше обратить внимание на следующий раздел статьи – содержащийся в нём код выполнится быстрее.
С помощью substr();
Когда неизвестен конкретный знак, достаточно информации о том, что он стоит в конце строки. Для его удаления можно использовать substr();, имеющий простое написание:
Поскольку не указывается и длина всей строки, достаточно указать отрицательное значение – тогда поиск будет вестись с её конца. Но ничто не мешает указать в качестве длины и положительное число, если оно известно и не изменяется.
Примеры кода
Через rtrim();
<?
$string = «В чащах юга жил-был цитрус… — да, но фальшивый экземпляръ!»;
$updated_string = rtrim($string, «!»);
print $string.»<br>».$updated_string;
?>
В итоге исчезнет восклицательный знак, выведутся две строки: оригинальная и изменённая. Обработка с привязкой к самому символу, но не к его месту.
Через regex
Второй метод отличается обнаружением конца строки с помощью выражения, а не символа, и представлен следующим образом:
<?
$string = «В чащах юга жил-был цитрус… — да, но фальшивый экземпляръ!»;
$updated_string = preg_replace(‘/.$/’, », $string);
print $string.»<br>».$updated_string;
?>
Через substr();
Использование substr();настолько же легко:
<?
$string = «В чащах юга жил-был цитрус… — да, но фальшивый экземпляръ!»;
$updated_string = substr($string, 0, -1);
print $string.»<br>».$updated_string;
?>