strrchr

(PHP 4, PHP 5)

strrchrНаходит последнее вхождение символа в строке

Описание

string strrchr ( string $haystack , mixed $needle )

Возвращает подстроку строки haystack начиная с последнего вхождения needle до конца строки.

Список параметров

haystack

Строка, в которой производится поиск

needle

Если needle состоит более чем из одного символа, используется только первый символ. Это поведение отличается от strstr().

Если needle не является строкой, он приводится к целому и трактуется как код символа.

Возвращаемые значения

Функция возвращает фрагмент строки, или FALSE, если подстрока needle не найдена.

Список изменений

Версия Описание
4.3.0 Эта функция теперь бинарно-безопасна.

Примеры

Пример #1 Пример использования strrchr()

<?php
// получить последнюю директорию из $PATH
$dir substr(strrchr($PATH":"), 1);

// получить все после последнего перевода строки
$text "Line 1\nLine 2\nLine 3";
$last substr(strrchr($text10), );
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • strstr() - Находит первое вхождение подстроки
  • strrpos() - Возвращает позицию последнего вхождения подстроки в строке

Коментарии

<?

// Reverse search of strrchr.
function strrrchr($haystack,$needle)
{

   
// Returns everything before $needle (inclusive).
   
return substr($haystack,0,strpos($haystack,$needle)+1);
   
}

$string "FIELD NUMBER(9) NOT NULL";

echo 
strrrchr($string,")"); // Will print FIELD (9)

?>
2003-04-14 15:43:48
http://php5.kiev.ua/manual/ru/function.strrchr.html
strrchr is also very useful for finding the extension of a file. For example:

$ext = strrchr($filename, ".");

and $ext will contain the extension of the file, including a ".", if the file has an extension, and FALSE if the file has no extension. If the file has multiple extensions, such as "evilfile.jpg.vbs", then this construction will just return the last extension.
2003-05-23 19:24:48
http://php5.kiev.ua/manual/ru/function.strrchr.html
The function provided by marcokonopacki at hotmail dot com isn't really a reverse-version of strrchr(), rather a reverse version of strchr(). It returns everything from the start of $haystack up to the FIRST instance of the $needle. This is basically a reverse of the behavior which you expect from strchr(). A reverse version of strrchr() would return everything in $haystack up to the LAST instance of $needle, eg:

<?php
// reverse strrchr() - PHP v4.0b3 and above
function reverse_strrchr($haystack$needle)
{
   
$pos strrpos($haystack$needle);
    if(
$pos === false) {
        return 
$haystack;
    }
    return 
substr($haystack0$pos 1);
}
?>

Note that this function will need to be modified slightly to work with pre 4.0b3 versions of PHP due to the return type of strrpos() ('0' is not necessarily 'false'). Check the documentation on strrpos() for more info. 

A function like this can be useful for extracting the path to a script, for example:

<?
$string 
"/path/to/the/file/filename.php";

echo 
reverse_strrchr($string'/'); // will echo "/path/to/the/file/"
?>
2004-02-16 21:16:20
http://php5.kiev.ua/manual/ru/function.strrchr.html
I used dchris1 at bigpond dot net dot au 's reverse strrchr and reduced it to one line of code and fixed it's functionality - the real strrchr() returns FALSE if the needle is not found, not the haystack :)

<?php
// reverse strrchr()
function reverse_strrchr($haystack$needle)
{
                return 
strrpos($haystack$needle) ? substr($haystack0strrpos($haystack$needle) +) : false;

?>
2005-04-03 14:45:03
http://php5.kiev.ua/manual/ru/function.strrchr.html
$filename = 'strrchr_test.php';
print strrchr( $filename, '.' );

Result:
.php

$other_filename = 'strrchr_test.asp.php';
print  strrchr( $other_filename, '.' );

Result:
.php
2005-07-29 13:24:18
http://php5.kiev.ua/manual/ru/function.strrchr.html
to marcokonopacki at hotmail dot com.

I had to make a slight change in your function for it to return the complete needle inclusive.

// Reverse search of strrchr.
function strrrchr($haystack,$needle)
{

   // Returns everything before $needle (inclusive).
   //return substr($haystack,0,strpos($haystack,$needle)+1);
   // becomes
   return substr($haystack,0,strpos($haystack,$needle)+strlen($needle));
}

Note: the +1 becomes +strlen($needle)

Otherwise it only returns the first character in needle backwards.
2005-12-25 00:54:06
http://php5.kiev.ua/manual/ru/function.strrchr.html
just a small addition to carlos dot lage at gmail dot com note which makes it a bit more useful and flexible:

<?php
// return everything up to last instance of needle
// use $trail to include needle chars including and past last needle 
function reverse_strrchr($haystack$needle$trail) {
    return 
strrpos($haystack$needle) ? substr($haystack0strrpos($haystack$needle) + $trail) : false;
}
// usage:
$ns = (reverse_strrchr($_SERVER["SCRIPT_URI"], "/"0));
$ns2 = (reverse_strrchr($_SERVER["SCRIPT_URI"], "/"1));
echo(
$ns "<br>" $ns2);
?>
2006-04-08 20:43:23
http://php5.kiev.ua/manual/ru/function.strrchr.html
to: repley at freemail dot it

the code works very well, but as i was trying to cut script names (e.g.: $_SERVER["SCRIPT_NAME"] => /index.php, cut the string at "/" and return "index.php") it returned nothing (false). i've modified your code and now it works also if the needle is the first char.
- regards from germany

<?php
//strxchr(string haystack, string needle [, bool int leftinclusive [, bool int rightinclusive ]])
function strxchr($haystack$needle$l_inclusive 0$r_inclusive 0){
   if(
strrpos($haystack$needle)){
       
//Everything before last $needle in $haystack.
       
$left substr($haystack0strrpos($haystack$needle) + $l_inclusive);
 
       
//Switch value of $r_inclusive from 0 to 1 and viceversa.
       
$r_inclusive = ($r_inclusive == 0) ? 0;
 
       
//Everything after last $needle in $haystack.
       
$right substr(strrchr($haystack$needle), $r_inclusive);
 
       
//Return $left and $right into an array.
       
return array($left$right);
   } else {
       if(
strrchr($haystack$needle)) return array(''substr(strrchr($haystack$needle), $r_inclusive));
       else return 
false;
   }
}
?>
2006-06-06 22:55:42
http://php5.kiev.ua/manual/ru/function.strrchr.html
<?php
/**
 * Removes the preceeding or proceeding portion of a string
 * relative to the last occurrence of the specified character.
 * The character selected may be retained or discarded.
 * 
 * Example usage:
 * <code>
 * $example = 'http://example.com/path/file.php';
 * $cwd_relative[] = cut_string_using_last('/', $example, 'left', true);
 * $cwd_relative[] = cut_string_using_last('/', $example, 'left', false);
 * $cwd_relative[] = cut_string_using_last('/', $example, 'right', true);
 * $cwd_relative[] = cut_string_using_last('/', $example, 'right', false);
 * foreach($cwd_relative as $string) {
 *     echo "$string <br>".PHP_EOL;
 * }
 * </code>
 * 
 * Outputs:
 * <code>
 * http://example.com/path/
 * http://example.com/path
 * /file.php
 * file.php
 * </code>
 * 
 * @param string $character the character to search for.
 * @param string $string the string to search through.
 * @param string $side determines whether text to the left or the right of the character is returned.
 * Options are: left, or right.
 * @param bool $keep_character determines whether or not to keep the character.
 * Options are: true, or false.
 * @return string
 */
function cut_string_using_last($character$string$side$keep_character=true) {
   
$offset = ($keep_character 0);
   
$whole_length strlen($string);
   
$right_length = (strlen(strrchr($string$character)) - 1);
   
$left_length = ($whole_length $right_length 1);
    switch(
$side) {
        case 
'left':
           
$piece substr($string0, ($left_length $offset));
            break;
        case 
'right':
           
$start = (- ($right_length $offset));
           
$piece substr($string$start);
            break;
        default:
           
$piece false;
            break;
    }
    return(
$piece);
}
?>
2011-03-30 16:07:24
http://php5.kiev.ua/manual/ru/function.strrchr.html
I think that a good way (I don't know if is the best one) to extract a portion from a string:
<?php

$image 
"image.name.jpg";
// get file extension
preg_replace("/.*\.(.*)$/""$1"$last);
// will result: jpg

?>

Is faster that substr(strrchr...
2017-08-02 11:32:28
http://php5.kiev.ua/manual/ru/function.strrchr.html

    Поддержать сайт на родительском проекте КГБ