substr

(PHP 4, PHP 5)

substrВозвращает подстроку

Описание

string substr ( string $string , int $start [, int $length ] )

Возвращает подстроку строки string, начинающейся с start символа по счету и длиной length символов.

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

string

Входная строка. Должна содержать хотя бы один символ.

start

Если start неотрицателен, возвращаемая подстрока начинается с позиции start от начала строки, считая от нуля. Например, в строке 'abcdef', в позиции 0 находится символ 'a', в позиции 2 - символ 'c', и т.д.

Если start отрицательный, возвращаемая подстрока начинается с позиции, отстоящей на start символов от конца строки string.

Если string меньше либо содержит ровно start символов, будет возвращено FALSE.

Пример #1 Использование отрицательного параметра start

<?php
$rest 
substr("abcdef", -1);    // возвращает "f"
$rest substr("abcdef", -2);    // возвращает "ef"
$rest substr("abcdef", -31); // возвращает "d"
?>

length

Если length положительный, возвращаемая строка будет не длиннее length символов, начиная с параметраstart (в зависимости от длины string).

Если length отрицательный, то будет отброшено указанное этим аргументом число символов с конца строки string (после того как будет вычислена стартовая позиция, если start отрицателен). Если при этом позиция начала подстроки, определяемая аргументом start, находится в отброшенной части строки или за ней, возвращается false.

Если указан параметр length и является одним из 0, FALSE или NULL, то будет возвращена пустая строка.

Если параметр length опущен, то будет возвращена подстрока, начинающаяся с позиции, указанной параметром start и длящейся до конца строки.

Пример #2 Использование отрицательного параметра length

<?php
$rest 
substr("abcdef"0, -1);  // возвращает "abcde"
$rest substr("abcdef"2, -1);  // возвращает "cde"
$rest substr("abcdef"4, -4);  // возвращает false
$rest substr("abcdef", -3, -1); // возвращает "de"
?>

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

Возвращает извлеченную часть строки, или FALSE в случае возникновения ошибки или пустую строку string.

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

Версия Описание
5.2.2 - 5.2.6 Если параметр start указывает на позицию с отрицательной обрезкой, возвращается FALSE. Другие версии возвращают строку с начала.

Примеры

Пример #3 Базовое использование substr()

<?php
echo substr('abcdef'1);     // bcdef
echo substr('abcdef'13);  // bcd
echo substr('abcdef'04);  // abcd
echo substr('abcdef'08);  // abcdef
echo substr('abcdef', -11); // f

// Получить доступ к отдельному символу в строке
// можно также с помощью "квадратных скобок"
$string 'abcdef';
echo 
$string[0];                 // a
echo $string[3];                 // d
echo $string[strlen($string)-1]; // f

?>

Пример #4 substr() и приведение типов

<?php
class apple {
    public function 
__toString() {
        return 
"green";
    }
}

echo 
"1) ".var_export(substr("pear"02), true).PHP_EOL;
echo 
"2) ".var_export(substr(5432102), true).PHP_EOL;
echo 
"3) ".var_export(substr(new apple(), 02), true).PHP_EOL;
echo 
"4) ".var_export(substr(true01), true).PHP_EOL;
echo 
"5) ".var_export(substr(false01), true).PHP_EOL;
echo 
"6) ".var_export(substr(""01), true).PHP_EOL;
echo 
"7) ".var_export(substr(1.2e304), true).PHP_EOL;
?>

Результат выполнения данного примера:

1) 'pe'
2) '54'
3) 'gr'
4) '1'
5) false
6) false
7) '1200'

Ошибки

Возвращает FALSE в случае ошибки.

<?php
var_dump
(substr('a'1)); // bool(false)
?>

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

Коментарии

Автор:
If you want to substring the middle of a string with another and keep the words intact:

<?php
/**
 * Reduce a string by the middle, keeps whole words together
 * 
 * @param string $string 
 * @param int $max (default 50)
 * @param string $replacement (default [...])
 * @return string 
 * @author david at ethinkn dot com 
 * @author loic at xhtml dot ne 
 * @author arne dot hartherz at gmx dot net 
 */

function strMiddleReduceWordSensitive ($string$max 50$rep '[...]') {
   
$strlen strlen($string);

    if (
$strlen <= $max)
        return 
$string;

   
$lengthtokeep $max strlen($rep);
   
$start 0;
   
$end 0;

    if ((
$lengthtokeep 2) == 0) {
       
$start $lengthtokeep 2;
       
$end $start;
    } else {
       
$start intval($lengthtokeep 2);
       
$end $start 1;
    } 

   
$i $start;
   
$tmp_string $string;
    while (
$i $strlen) {
        if (
$tmp_string[$i] == ' ') {
           
$tmp_string substr($tmp_string0$i) . $rep;
           
$return $tmp_string;
        } 
       
$i++;
    } 

   
$i $end;
   
$tmp_string strrev ($string);
    while (
$i $strlen) {
        if (
$tmp_string[$i] == ' ') {
           
$tmp_string substr($tmp_string0$i);
           
$return .= strrev ($tmp_string);
        } 
       
$i++;
    } 
    return 
$return;
    return 
substr($string0$start) . $rep substr($string, - $end);


echo 
strMiddleReduceWordSensitive ('ABCDEEF GHIJK LLKJHKHKJHKL HGHFK sdfasdfsdafsdf sadf asdf sadf sad s'30) . "\n";
// Returns: ABCDEEF GHIJK[...]asdf sadf sad s (33 chrs)
echo strMiddleReduceWordSensitive ('ABCDEEF GHIJK LLKJHKHKJHKL HGHFK sdfasdfsdafsdf sadf asdf sadf sad s'30'...') . "\n";
// Returns: ABCDEEF GHIJK...asdf sadf sad s (32 chrs)
?>
2003-07-05 20:39:10
http://php5.kiev.ua/manual/ru/function.substr.html
To quickly trim an optional trailing slash off the end of a path name:

if (substr( $path, -1 ) == '/') $path = substr( $path, 0, -1 );
2005-03-13 23:34:04
http://php5.kiev.ua/manual/ru/function.substr.html
Well this is a script I wrote, what it does is chop up long words with malicious meaning into several parts. This way, a chat in a table will not get stretched anymore.

<?php

function text($string,$limit=20,$chop=10){

$text explode(" ",$string);
while(list(
$key$value) = each($text)){
   
$length strlen($value);
    if(
$length >=20){
        for(
$i=0;$i<=$length;$i+=10){
           
$new .= substr($value$i10);
           
$new .= " ";
        }
         
$post .= $new;
    }
    elseif(
$length <=15){
       
$post .= $value;
    }
   
$post .= " ";
}
return(
$post);
}

// for example, this would return:
$output text("Well this text doesn't get cut up, yet thisssssssssssssssssssssssss one does."105);

echo(
$output); // "Well this text doesn't get cup up, yet thiss sssss sssss sssss sssss sss one does."
?>

I hope it was useful.. :)
2005-03-21 13:19:23
http://php5.kiev.ua/manual/ru/function.substr.html
Hmm ... this is a script I wrote, whitch is very similar to substr, but it isn't takes html and bbcode for counting and it takes portion of string and show avoided (html & bbcode) tags too ;] 
Specially usefull for show part of serach result included html and bbcode tags

<?php

/**
 * string csubstr ( string string, int start [, int length] )
 *
 * @author FanFataL
 * @param string string
 * @param int start
 * @param [int length]
 * @return string
 */
function csubstr($string$start$length=false) {
   
$pattern '/(\[\w+[^\]]*?\]|\[\/\w+\]|<\w+[^>]*?>|<\/\w+>)/i';
   
$clean preg_replace($patternchr(1), $string);
    if(!
$length)
       
$str substr($clean$start);
    else {
       
$str substr($clean$start$length);
       
$str substr($clean$start$length substr_count($strchr(1)));
    }
   
$pattern str_replace(chr(1),'(.*?)',preg_quote($str));
    if(
preg_match('/'.$pattern.'/is'$string$matched))
        return 
$matched[0];
    return 
$string;
}

?>

Using this is similar to simple substr.

Greatings ;]
...
2005-05-17 02:45:49
http://php5.kiev.ua/manual/ru/function.substr.html
This returns the portion of str specified by the start and length parameters..
It can performs multi-byte safe on number of characters. like mb_strcut() ...

Note:
1.Use it like this bite_str(string str, int start, int length [,byte of on string]);
2.First character's position is 0. Second character position is 1, and so on...
3.$byte is one character length of your encoding, For example: utf-8 is "3", gb2312 and big5 is "2"...you can use the function strlen() get it... 
Enjoy it :) ...

--- Bleakwind
QQ:940641
http://www.weaverdream.com

PS:I'm sorry my english is too poor... :( 

<?php
// String intercept By Bleakwind
// utf-8:$byte=3 | gb2312:$byte=2 | big5:$byte=2
function bite_str($string$start$len$byte=3)
{
   
$str     "";
   
$count   0;
   
$str_len strlen($string);
    for (
$i=0$i<$str_len$i++) {
        if ((
$count+1-$start)>$len) {
           
$str  .= "...";
            break;
        } elseif ((
ord(substr($string,$i,1)) <= 128) && ($count $start)) {
           
$count++;
        } elseif ((
ord(substr($string,$i,1)) > 128) && ($count $start)) {
           
$count $count+2;
           
$i     $i+$byte-1;
        } elseif ((
ord(substr($string,$i,1)) <= 128) && ($count >= $start)) {
           
$str  .= substr($string,$i,1);
           
$count++;
        } elseif ((
ord(substr($string,$i,1)) > 128) && ($count >= $start)) {
           
$str  .= substr($string,$i,$byte);
           
$count $count+2;
           
$i     $i+$byte-1;
        }
    }
    return 
$str;
}

// Test
$str "123456ֽ123456ַ123456ȡ";
for(
$i=0;$i<30;$i++){
    echo 
"<br>".bite_str($str,$i,20);   
}
?>
2005-05-25 13:11:18
http://php5.kiev.ua/manual/ru/function.substr.html
I have developed a function with a similar outcome to jay's

Checks if the last character is or isnt a space. (does it the normal way if it is)
It explodes the string into an array of seperate works, the effect is... it chops off anything after and including the last space.

<?php
function limit_string($string$charlimit)
{
    if(
substr($string,$charlimit-1,1) != ' ')
    {
       
$string substr($string,'0',$charlimit);
       
$array explode(' ',$string);
       
array_pop($array);
       
$new_string implode(' ',$array);

        return 
$new_string.'...';
    }
    else
    {   
        return 
substr($string,'0',$charlimit-1).'...';
    }
}
?>
2005-06-07 06:43:41
http://php5.kiev.ua/manual/ru/function.substr.html
If you need just a single character from the string you don't need to use substr(), just use curly braces notation:

<?php
   
// both lines will output the 3rd character
   
echo substr($my_string21);
    echo 
$my_string{2}; 
?>

curly braces syntax is faster and more readable IMHO..
2005-06-07 23:31:26
http://php5.kiev.ua/manual/ru/function.substr.html
I needed to cut a string after x chars at a  html converted utf-8 text (for example Japanese text like &#23344;&#35632;&#24368;&#33072;&#27440;&#32591;). 
The problem was, the different length of the signs, so I wrote the following function to handle that.
Perhaps it helps.

<?php

function html_cutstr ($str$len)
{
    if (!
preg_match('/\&#[0-9]*;.*/i'$str))
    {
       
$rVal strlen($str$len);
        break;
    }

   
$chars 0;
   
$start 0;
    for(
$i=0$i strlen($str); $i++)
    {
        if (
$chars >= $len)
        break;

       
$str_tmp substr($str$start$i-$start);
        if (
preg_match('/\&#[0-9]*;.*/i'$str_tmp))
        {
           
$chars++;
           
$start $i;
        }
    }
   
$rVal substr($str0$start);
    if (
strlen($str) > $start)
   
$rVal .= " ...";
    return 
$rVal;
}
?>
2005-06-29 11:07:36
http://php5.kiev.ua/manual/ru/function.substr.html
Regarding the utf8_substr function from lmak: The pattern '/./u' doesn't match newline characters. This means that the substring from 0 to the total length of the string will miss the number of characters in the end matching the number of newlines in the string. To fix this one can add the s modifier (PCRE_DOTALL) in the pattern:

<?php
function utf8_substr($str,$start)
{
   
preg_match_all("/./su"$str$ar);

   if(
func_num_args() >= 3) {
       
$end func_get_arg(2);
       return 
join("",array_slice($ar[0],$start,$end));
   } else {
       return 
join("",array_slice($ar[0],$start));
   }
}
?>
2005-07-25 17:37:38
http://php5.kiev.ua/manual/ru/function.substr.html
Add on to (a function originally written by) "Matias from Argentina": str_format_number function.

Just added handling of $String shorter then $Format by adding a side to start the fill and a string length to the while loop.

<?php
function str_format_number($String$Format$Start 'left'){
   
//If we want to fill from right to left incase string is shorter then format
   
if ($Start == 'right') {
       
$String strrev($String);
       
$Format strrev($Format); 
    }
    if(
$Format == '') return $String;
    if(
$String == '') return $String;   
   
$Result '';
   
$FormatPos 0;
   
$StringPos 0;
    while ((
strlen($Format) - 1) >= $FormatPos && strlen($String) > $StringPos) {
       
//If its a number => stores it
       
if (is_numeric(substr($Format$FormatPos1))) {
           
$Result .= substr($String$StringPos1);
           
$StringPos++;
           
//If it is not a number => stores the caracter
       
} else {
           
$Result .= substr($Format$FormatPos1);
        }
       
//Next caracter at the mask.
       
$FormatPos++;
    }
    if (
$Start == 'right'$Result strrev($Result);
    return 
$Result;
}
?>
2006-01-10 15:34:43
http://php5.kiev.ua/manual/ru/function.substr.html
This function can replace substr() in some situations you don't want to cut right in the middle of a word. strtrim will cut between words when it is possible choosing the closest possible final string len to return. the maxoverflow parameter lets you choose how many characters can overflow past the maxlen parameter.

<?php

function strtrim($str$maxlen=100$elli=NULL$maxoverflow=15) {
    global 
$CONF;
       
    if (
strlen($str) > $maxlen) {
           
        if (
$CONF["BODY_TRIM_METHOD_STRLEN"]) {
            return 
substr($str0$maxlen);
        }
           
       
$output NULL;
       
$body explode(" "$str);
       
$body_count count($body);
       
       
$i=0;
   
        do {
           
$output .= $body[$i]." ";
           
$thisLen strlen($output);
           
$cycle = ($thisLen $maxlen && $i $body_count-&& ($thisLen+strlen($body[$i+1])) < $maxlen+$maxoverflow?true:false);
           
$i++;
        } while (
$cycle);
        return 
$output.$elli;
    }
    else return 
$str;
}

?>
2006-10-15 20:47:50
http://php5.kiev.ua/manual/ru/function.substr.html
<?php

/**
 * string substrpos(string $str, mixed $start [[, mixed $end], boolean $ignore_case])
 *
 * If $start is a string, substrpos will return the string from the position of the first occuring $start to $end
 *
 * If $end is a string, substrpos will return the string from $start to the position of the first occuring $end
 *
 * If the first character in (string) $start or (string) $end is '-', the last occuring string will be used.
 *
 * If $ignore_case is true, substrpos will not care about the case.
 * If $ignore_case is false (or anything that is not (boolean) true, the function will be case sensitive.
 *        Both of the above: only applies if either $start or $end are strings.
 *
 * echo substrpos('This is a string with 0123456789 numbers in it.', 5, '5');
 *        // Prints 'is a string with 01234';
 *
 * echo substrpos('This is a string with 0123456789 numbers in it.', '5', 5);
 *        // Prints '56789'
 *
 * echo substrpos('This is a string with 0123456789 numbers in it and two strings.', -60, '-string')
 *        // Prints 's is a string with 0123456789 numbers in it and two '
 *
 * echo substrpos('This is a string with 0123456789 numbers in it and two strings.', -60, '-STRING', true)
 *        // Prints 's is a string with 0123456789 numbers in it and two '
 *
 * echo substrpos('This is a string with 0123456789 numbers in it and two strings.', -60, '-STRING', false)
 *        // Prints 's is a string with 0123456789 numbers in it and two strings.'
 *
 * Warnings:
 *        Since $start and $end both take either a string or an integer:
 *            If the character or string you are searching $str for is a number, pass it as a quoted string.
 *        If $end is (integer) 0, an empty string will be returned.
 *        Since this function takes negative strings ('-search_string'):
 *            If the string your using in $start or $end is a '-' or begins with a '-' escape it with a '\'.
 *            This only applies to the *first* character of $start or $end.
 */

// Define stripos() if not defined (PHP < 5).
if (!is_callable("stripos")) {
    function 
stripos($str$needle$offset 0) {
        return 
strpos(strtolower($str), strtolower($needle), $offset);
    }
}

function 
substrpos($str$start$end false$ignore_case false) {
   
// Use variable functions
   
if ($ignore_case === true) {
       
$strpos 'stripos'// stripos() is included above in case it's not defined (PHP < 5).
   
} else {
       
$strpos 'strpos';
    }

   
// If end is false, set it to the length of $str
   
if ($end === false) {
       
$end strlen($str);
    }

   
// If $start is a string do what's needed to make it an integer position for substr().
   
if (is_string($start)) {
       
// If $start begins with '-' start processing until there's no more matches and use the last one found.
       
if ($start{0} == '-') {
           
// Strip off the '-'
           
$start substr($start1);
           
$found false;
           
$pos 0;
            while((
$curr_pos $strpos($str$start$pos)) !== false) {
               
$found true;
               
$pos $curr_pos 1;
            }
            if (
$found === false) {
               
$pos false;
            } else {
               
$pos -= 1;
            }
        } else {
           
// If $start begins with '\-', strip off the '\'.
           
if ($start{0} . $start{1} == '\-') {
               
$start substr($start1);
            }
           
$pos $strpos($str$start);
        }
       
$start $pos !== false $pos 0;
    }

   
// Chop the string from $start to strlen($str).
   
$str substr($str$start);

   
// If $end is a string, do exactly what was done to $start, above.
   
if (is_string($end)) {
        if (
$end{0} == '-') {
           
$end substr($end1);
           
$found false;
           
$pos 0;
            while((
$curr_pos strpos($str$end$pos)) !== false) {
               
$found true;
               
$pos $curr_pos 1;
            }
            if (
$found === false) {
               
$pos false;
            } else {
               
$pos -= 1;
            }
        } else {
            if (
$end{0} . $end{1} == '\-') {
               
$end substr($end1);
            }
           
$pos $strpos($str$end);
        }
       
$end $pos !== false $pos strlen($str);
    }

   
// Since $str has already been chopped at $start, we can pass 0 as the new $start for substr()
   
return substr($str0$end);
}

?>
2006-10-19 06:19:39
http://php5.kiev.ua/manual/ru/function.substr.html
Here is also a nice (but a bit slow) alternative for colorizing an true color image:

<?php
// $colorize = hexadecimal code in String format, f.e. "10ffa2"
// $im = the image that have to be computed

$red hexdec(substr($colorize02));
$green hexdec(substr($colorize22));
$blue hexdec(substr($colorize42));

$lum_c floor(($red*299 $green*587 $blue*144) / 1000);

for (
$i 0$i $lum_c$i++)
{
 
$r $red $i $lum_c;
 
$g $green $i $lum_c;
 
$b $blue $i $lum_c;
 
$pal[$i] = $r<<16 $g<<$b;
}
$pal[$lum_c] = $red<<16 $green<<$blue;
for (
$i $lum_c+1$i 255$i++)
{
 
$r $red + (255-$red) * ($i-$lum_c) / (255-$lum_c);
 
$g $green + (255-$green) * ($i-$lum_c) / (255-$lum_c);
 
$b $blue + (255-$blue) * ($i-$lum_c) / (255-$lum_c);
 
$pal[$i] = $r<<16 $g<<$b;
}

$sy imagesy($im);
$sx imagesx($im);
for(
$y=0;$y<$sy;$y++)
{
  for(
$x=0;$x<$sx;$x++)
  {
   
$rgba imagecolorat($im$x$y);
   
$a = ($rgba 0x7F000000) >> 24;
   
$r = ($rgba 0xFF0000) >> 16;
   
$g = ($rgba 0x00FF00) >> 8;
   
$b = ($rgba 0x0000FF);

   
$lum floor(($r*299+$g*587+$b*144)/1000);

   
imagesetpixel($im$x$y$a<<24 $pal[$lum]);
  }
}
?>
2007-02-13 09:45:39
http://php5.kiev.ua/manual/ru/function.substr.html
<?php
/*
    An advanced substr but without breaking words in the middle.
    Comes in 3 flavours, one gets up to length chars as a maximum, the other with length chars as a minimum up to the next word, and the other considers removing final dots, commas and etcteteras for the sake of beauty (hahaha).
   This functions were posted by me some years ago, in the middle of the ages I had to use them in some corporations incorporated, with the luck to find them in some php not up to date mirrors. These mirrors are rarely being more not up to date till the end of the world... Well, may be am I the only person that finds usef not t bre word in th middl?

Than! (ks)

This is the calling syntax:

    snippet(phrase,[max length],[phrase tail])
    snippetgreedy(phrase,[max length before next space],[phrase tail])

*/

function snippet($text,$length=64,$tail="...") {
   
$text trim($text);
   
$txtl strlen($text);
    if(
$txtl $length) {
        for(
$i=1;$text[$length-$i]!=" ";$i++) {
            if(
$i == $length) {
                return 
substr($text,0,$length) . $tail;
            }
        }
       
$text substr($text,0,$length-$i+1) . $tail;
    } 
    return 
$text;
}

// It behaves greedy, gets length characters ore goes for more

function snippetgreedy($text,$length=64,$tail="...") {
   
$text trim($text);
    if(
strlen($text) > $length) {
        for(
$i=0;$text[$length+$i]!=" ";$i++) {
            if(!
$text[$length+$i]) {
                return 
$text;
            }
        }
       
$text substr($text,0,$length+$i) . $tail;
    } 
    return 
$text;
}

// The same as the snippet but removing latest low punctuation chars, 
// if they exist (dots and commas). It performs a later suffixal trim of spaces

function snippetwop($text,$length=64,$tail="...") {
   
$text trim($text);
   
$txtl strlen($text);
    if(
$txtl $length) {
        for(
$i=1;$text[$length-$i]!=" ";$i++) {
            if(
$i == $length) {
                return 
substr($text,0,$length) . $tail;
            }
        }
        for(;
$text[$length-$i]=="," || $text[$length-$i]=="." || $text[$length-$i]==" ";$i++) {;}
       
$text substr($text,0,$length-$i+1) . $tail;
    } 
    return 
$text;
}

/*
echo(snippet("this is not too long to run on the column on the left, perhaps, or perhaps yes, no idea") . "<br>");
echo(snippetwop("this is not too long to run on the column on the left, perhaps, or perhaps yes, no idea") . "<br>");
echo(snippetgreedy("this is not too long to run on the column on the left, perhaps, or perhaps yes, no idea"));
*/
?>
2007-02-14 04:20:02
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
I wanted to work out the fastest way to get the first few characters from a string, so I ran the following experiment to compare substr, direct string access and strstr:

<?php
/* substr access */
beginTimer();
for (
$i 0$i 1500000$i++){
   
$opening substr($string,0,11);
    if (
$opening == 'Lorem ipsum'){
       
true;
    }else{
       
false;
    }
}
$endtime1 endTimer();

/* direct access */
beginTimer();
for (
$i 0$i 1500000$i++){
    if (
$string[0] == 'L' && $string[1] == 'o' && $string[2] == 'r' && $string[3] == 'e' && $string[4] == 'm' && $string[5] == ' ' && $string[6] == 'i' && $string[7] == 'p' && $string[8] == 's' && $string[9] == 'u' && $string[10] == 'm'){
       
true;
    }else{
       
false;
    }
}
$endtime2 endTimer();

/* strstr access */
beginTimer();
for (
$i 0$i 1500000$i++){
   
$opening strstr($string,'Lorem ipsum');
    if (
$opening == true){
       
true;
    }else{
       
false;
    }
}
$endtime3 endTimer();

echo 
$endtime1."\r\n".$endtime2."\r\n".$endtime3;
?>

The string was 6 paragraphs of Lorem Ipsum, and I was trying match the first two words. The experiment was run 3 times and averaged. The results were:

(substr) 3.24
(direct access) 11.49
(strstr) 4.96

(With standard deviations 0.01, 0.02 and 0.04)

THEREFORE substr is the fastest of the three methods for getting the first few letters of a string.
2007-08-31 06:56:23
http://php5.kiev.ua/manual/ru/function.substr.html
Adding the $limit parameter introduced a bug that was not present in the original. If $limit is small or negative, a string with a length exceeding the limit can be returned. The $limit parameter should be checked. It takes slightly more processing, but it is dwarfed in comparison to the use of strlen().

<?php
 
function short_name($str$limit)
  {
   
// Make sure a small or negative limit doesn't cause a negative length for substr().
   
if ($limit 3)
    {
     
$limit 3;
    }

   
// Now truncate the string if it is over the limit.
   
if (strlen($str) > $limit)
    {
      return 
substr($str0$limit 3) . '...';
    }
    else
    {
      return 
$str;
    }
  }
?>
2007-09-24 13:55:03
http://php5.kiev.ua/manual/ru/function.substr.html
Because i didnt see a function that would cut a phrase from a text (article or whatever) no matter where, front/middle/end and add ... + keeping the words intact, i wrote this:

Usage:
- The parameter $value if array will need the whole text and the portion you want to start from, a string. EG: cuttext(array($text, $string), 20). If the string is "have" and is near the beginning of the text, the function will cut like "I have a car ...", if the string is in the middle somewhere it will cut like "... if you want to have your own car ..." and if its somewhere near the end it will cut like "... and you will have one."
- The $length parameter is self explanatory.

Note: if you have just a string "127hh43h2h52312453jfks2" and you want to cut it, just use the function like so: cuttext($string, 10) and it will cut it like "127hh43h2h..."

<?php

////////////////////////////////////////////////////////
// Function:         cuttext
// Description: Cuts a string and adds ...

function cuttext($value$length)
{   
    if(
is_array($value)) list($string$match_to) = $value;
    else { 
$string $value$match_to $value{0}; }

   
$match_start stristr($string$match_to);
   
$match_compute strlen($string) - strlen($match_start);

    if (
strlen($string) > $length)
    {
        if (
$match_compute < ($length strlen($match_to)))
        {
           
$pre_string substr($string0$length);
           
$pos_end strrpos($pre_string" ");
            if(
$pos_end === false$string $pre_string."...";
            else 
$string substr($pre_string0$pos_end)."...";
        }
        else if (
$match_compute > (strlen($string) - ($length strlen($match_to))))
        {
           
$pre_string substr($string, (strlen($string) - ($length strlen($match_to))));
           
$pos_start strpos($pre_string" ");
           
$string "...".substr($pre_string$pos_start);
            if(
$pos_start === false$string "...".$pre_string;
            else 
$string "...".substr($pre_string$pos_start);
        }
        else
        {       
           
$pre_string substr($string, ($match_compute round(($length 3))), $length);
           
$pos_start strpos($pre_string" "); $pos_end strrpos($pre_string" ");
           
$string "...".substr($pre_string$pos_start$pos_end)."...";
            if(
$pos_start === false && $pos_end === false$string "...".$pre_string."...";
            else 
$string "...".substr($pre_string$pos_start$pos_end)."...";
        }

       
$match_start stristr($string$match_to);
       
$match_compute strlen($string) - strlen($match_start);
    }
   
    return 
$string;
}

?>
2008-01-05 22:47:37
http://php5.kiev.ua/manual/ru/function.substr.html
The javascript charAt equivalent in php of felipe has a little bug. It's necessary to compare the type (implicit) aswell or the function returns a wrong result:
<?php
function charAt($str,$pos) {
    return (
substr($str,$pos,1) !== false) ? substr($str,$pos,1) : -1;
}
?>
2008-02-29 19:21:51
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
Split a string to an array of strings specified by an array of lengths:

<?php
function split_by_lengths($inString$arrayLengths)
{
   
$output = array();
    foreach (
$arrayLengths as $oneLength)
    {
       
$output[] = substr($inString0$oneLength);
       
$inString substr($inString$oneLength);
    }
    return (
$output);
}
?>
split_by_lengths('teststringtestteststring', array(4,6,4,4,6)) returns:
array('test','string','test','test','string')

Don't use it on user input without some error handling!
2008-03-17 05:53:49
http://php5.kiev.ua/manual/ru/function.substr.html
Just a little function to cut a string by the wanted amount. Works in both directions.

<?php
function cutString($str$amount 1$dir "right")
{
  if((
$n strlen($str)) > 0)
  {
    if(
$dir == "right")
    {
     
$start 0;
     
$end $n-$amount;
    } elseif( 
$dir == "left") {
     
$start $amount;
     
$end $n;
    }
   
    return 
substr($str$start$end);
  } else return 
false;
}
?>

Enjoy ;)
2008-08-05 10:59:53
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
Simple use of substr to determine possession:

<?php
function possessive ($word) {
    return 
$word.(substr($word, -1) == 's' "'" "'s");
}

// Davis => Davis'
// Paul => Paul's
?>
2008-09-29 13:01:54
http://php5.kiev.ua/manual/ru/function.substr.html
Here we have gr8 function which simply convert ip address to a number using substr with negative offset.
You can need it if you want to compare some IP addresses converted to a numbers. 
For example when using ip2country, or eliminating same range of ip addresses from your website :D

<?php

function ip2no($val)
{   
    list(
$A,$B,$C,$D)    =    explode(".",$val);
    return 
       
substr("000".$A,-3).
       
substr("000".$B,-3).
       
substr("000".$C,-3).
       
substr("000".$D,-3);
}

$min        =    ip2no("10.11.1.0");
$max        =    ip2no("111.11.1.0");
$visitor    =    ip2no("105.1.20.200");

if(
$min<$visitor && $visitor<$max)   
    {    echo 
'Welcome !';    }
else   
    {    echo 
'Get out of here !';    }

?>
2008-10-24 17:31:36
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
I created some functions for entity-safe splitting+lengthcounting:

<?php
function strlen_entities($text)
{
   
preg_match_all(
       
'/((?:&(?:#[0-9]{2,}|[a-z]{2,});)|(?:[^&])|'.         
       
'(?:&(?!\w;)))s',$text,$textarray);
    return 
count($textarray[0]);

function 
substr_entities($text,$start,$limit=0)
{
   
$return '';
   
preg_match_all(
       
'/((?:&(?:#[0-9]{2,}|[a-z]{2,});)|(?:[^&])|'.         
       
'(?:&(?!\w;)))s',$text,$textarray);
   
$textarray $textarray[0];
   
$numchars count($textarray)-1;
    if (
$start>=$numchars)
        return 
false;
    if (
$start<0)
    {
       
$start = ($numchars)+$start+1;
    }
    if (
$start>=0)
    {
        if (
$limit==0)
        {
           
$end=$numchars;
        }
        elseif (
$limit>0)
        {
           
$end $start+($limit-1);
        }
        else
        {
           
$end = ($numchars)+$limit;
        }

        for (
$i=$start;$i<=$end;$i++)
        {
           
$return .= $textarray[$i];
        }
        return 
$return;
    }
}
?>
2009-03-20 21:19:57
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
And as always there is bound to be a bug:

<?php
function strlen_entities($text)
{
   
preg_match_all(
       
'/((?:&(?:#[0-9]{2,}|[a-z]{2,});)|(?:[^&])|'.       
       
'(?:&(?!\w;)))s',$text,$textarray);
    return 
count($textarray[0]);

function 
substr_entities($text,$start,$limit=0)
{
   
$return '';
   
preg_match_all(
       
'/((?:&(?:#[0-9]{2,}|[a-z]{2,});)|(?:[^&])|'.       
       
'(?:&(?!\w;)))s',$text,$textarray);
   
$textarray $textarray[0];
   
$numchars count($textarray)-1;
    if (
$start>=$numchars)
        return 
false;
    if (
$start<0)
    {
       
$start = ($numchars)+$start+1;
    }
    if (
$start>=0)
    {
        if (
$limit==0)
        {
           
$end=$numchars;
        }
        elseif (
$limit>0)
        {
           
$end $start+($limit-1);
        }
        else
        {
           
$end = ($numchars)+$limit;
        }

        for (
$i=$start;($i<=$end && isset($textarray[$i]));$i++)
        {
           
$return .= $textarray[$i];
        }
        return 
$return;
    }
}
?>
2009-03-21 19:52:40
http://php5.kiev.ua/manual/ru/function.substr.html
Substring utf-8 strings!
very simple!

<?php
function substru($str,$from,$len){
    return 
preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'$from .'}'.'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'$len .'}).*#s','$1'$str);
}
?>
2009-04-08 03:28:14
http://php5.kiev.ua/manual/ru/function.substr.html
You might expect substr('123456', 6) to return an empty string. Instead it returns boolean FALSE.

This behavior should be mentioned in the Return Values section of the manual. Instead it is only mentioned in the Parameters section.

If you need an empty string instead of a boolean FALSE you should typecast the result to a string.

<?php
$a 
substr('123456'6);              // equivalent to $a = FALSE
$a = (string) substr('123456'6);   // equivalent to $a = '';
?>
2009-04-18 05:07:54
http://php5.kiev.ua/manual/ru/function.substr.html
For getting a substring of UTF-8 characters, I highly recommend mb_substr

<?php
        $utf8string 
"cakeæøå";

        echo 
substr($utf8string,0,5);
       
// output cake#
       
echo mb_substr($utf8string,0,5,'UTF-8');
       
//output cakeæ
?>
2009-04-29 09:25:13
http://php5.kiev.ua/manual/ru/function.substr.html
Drop extensions of a file (even from a file location string)

<?php

$filename 
"c:/some dir/abc defg. hi.jklmn";

echo 
substr($filename0, (strlen ($filename)) - (strlen (strrchr($filename,'.'))));

?>

output: c:/some dir/abc defg. hi

Hope it may help somebody like me.. (^_^)
2009-06-08 02:58:33
http://php5.kiev.ua/manual/ru/function.substr.html
Shortens the filename and its expansion has seen.

<?php
$file 
"Hellothisfilehasmorethan30charactersandthisfayl.exe";

function 
funclongwords($file)
{
if (
strlen($file) > 30)
{
$vartypesf strrchr($file,".");
$vartypesf_len strlen($vartypesf);
$word_l_w substr($file,0,15);
$word_r_w substr($file,-15);
$word_r_a substr($word_r_w,0,-$vartypesf_len);

return 
$word_l_w."...".$word_r_a.$vartypesf;
}
else
return 
$file;
}
// RETURN: Hellothisfileha...andthisfayl.exe
?>
2009-07-26 06:39:52
http://php5.kiev.ua/manual/ru/function.substr.html
One thing to keep in mind when using string indexes and UTF-8 is that string indexes are NOT multi-byte safe.

<?php
$string 
'äää1';
echo 
$string[3];
?>

Outputs:
¤

When it logically should output "1". This is not a bug, as PHP 'normal' string functions are not intended to be multi-byte safe. This can be solved by using this function

<?php
/**
 * 
 * @param string $string String to "search" from
 * @param int $index Index of the letter we want.
 * @return string The letter found on $index.
 */
function charAt($string$index){
    if(
$index mb_strlen($string)){
        return 
mb_substr($string$index1);
    }
    else{
        return -
1;
    }
}
?>
2009-10-05 07:42:19
http://php5.kiev.ua/manual/ru/function.substr.html
<?php

//removes string from the end of other

function removeFromEnd($string$stringToRemove) {
   
$stringToRemoveLen strlen($stringToRemove);
   
$stringLen strlen($string);
   
   
$pos $stringLen $stringToRemoveLen;

   
$out substr($string0$pos);

    return 
$out;
}

$string 'picture.jpg.jpg';
$string removeFromEnd($string'.jpg');
?>
2010-01-28 12:32:18
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
I needed a function like lpad from oracle, or right from SQL
 then I use this code :

<?php
function right($string,$chars)
{
   
$vright substr($stringstrlen($string)-$chars,$chars);
    return 
$vright;
   
}

    echo 
right('0r0j4152',4);
?>

Result: 
 4152
------------------------------------------------
This function is really simple, I just wanted to share, maybe helps someone out there. 

regards,
2010-10-29 17:10:32
http://php5.kiev.ua/manual/ru/function.substr.html
If you want to have a string BETWEEN two strings, just use this function:

<?php
function get_between($input$start$end)
{
 
$substr substr($inputstrlen($start)+strpos($input$start), (strlen($input) - strpos($input$end))*(-1));
  return 
$substr;
}

//Example:

$string "123456789";
$a "12";
$b "9";

echo 
get_between($string$a$b);

//Output:
//345678
?>
2011-01-14 10:56:45
http://php5.kiev.ua/manual/ru/function.substr.html
Anyone coming from the Python world will be accustomed to making substrings by using a "slice index" on a string.  The following function emulates basic Python string slice behavior. (A more elaborate version could be made to support array input as well as string, and the optional third "step" argument.)

<?php

function py_slice($input$slice) {
   
$arg explode(':'$slice);
   
$start intval($arg[0]);
    if (
$start 0) {
       
$start += strlen($input);
    }
    if (
count($arg) === 1) {
        return 
substr($input$start1);
    }
    if (
trim($arg[1]) === '') {
        return 
substr($input$start);
    }
   
$end intval($arg[1]);
    if (
$end 0) {
       
$end += strlen($input);
    }
    return 
substr($input$start$end $start);
}

print 
py_slice('abcdefg''2') . "\n";
print 
py_slice('abcdefg''2:4') . "\n";
print 
py_slice('abcdefg''2:') . "\n";
print 
py_slice('abcdefg'':4') . "\n";
print 
py_slice('abcdefg'':-3') . "\n";
print 
py_slice('abcdefg''-3:') . "\n";

?>

The $slice parameter can be a single character index, or a range separated by a colon. The start of the range is inclusive and the end is exclusive, which may be  counterintuitive. (Eg, py_slice('abcdefg', '2:4') yields 'cd' not 'cde'). A negative range value means to count from the end of the string instead of the beginning. Both the start and end of the range may be omitted; the start defaults to 0 and the end defaults to the total length of the input.

The output from the examples:
c
cd
cdefg
abcd
abcd
efg
2011-03-28 16:47:37
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
If you need to parse utf-8 strings char by char, try this one:

<?php
     $utf8marker
=chr(128);
     
$count=0;
     while(isset(
$string{$count})){
       if(
$string{$count}>=$utf8marker) {
         
$parsechar=substr($string,$count,2);
         
$count+=2;
       } else {
         
$parsechar=$string{$count};
         
$count++;
       }
       
/* do what you like with parsechar ... , eg.:*/  echo $parsechar."<BR>\r\n";
     }
?>

- it works without mb_substr
- it is fast, because it grabs characters based on indexes  when possible and avoids any count and split functions
2011-05-06 07:17:07
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
When using a value of a wrong type as second parameter , substr() does not return FALSE but NULL although the docs say, it should return FALSE on error.

Prior to PHP 5.3, substr() tries to cast the second parameter to int and doesn't throw any errors. Since PHP 5.3 a warning is thrown.
2011-07-08 04:07:19
http://php5.kiev.ua/manual/ru/function.substr.html
Using a 0 as the last parameter for substr().

As per examples
<?php $var substr($var4); ?>

works no problem. However 
<?php $var substr($var40); ?>

will get you nothing. Just a quick heads up
2012-06-15 17:27:15
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
<?Php 

### SUB STRING  BY WORD USING substr() and strpos()  #####

### THIS SCRIPT WILL RETURN PART OF STRING  WITHOUT WORD BREAK ###

$description ‘your description here your description here your description here your description here your description here your description here your description hereyour description here your description here’  // your description here .

$no_letter 30 ;

if(
strlen($desctiption) > 30 )
{
     echo 
substr($description,0,strpos($description,’ ‘,30));             //strpos to find ‘ ‘ after 30 characters.
}
else {
     echo 
$description;
}

?>
2013-01-18 11:57:37
http://php5.kiev.ua/manual/ru/function.substr.html
may be by following functions will be easier to extract the needed sub parts from a string:

<?php
after 
('@''biohazard@online.ge');
//returns 'online.ge'
//from the first occurrence of '@'

before ('@''biohazard@online.ge');
//returns 'biohazard'
//from the first occurrence of '@'

between ('@''.''biohazard@online.ge');
//returns 'online'
//from the first occurrence of '@'

after_last ('[''sin[90]*cos[180]');
//returns '180]'
//from the last occurrence of '['

before_last ('[''sin[90]*cos[180]');
//returns 'sin[90]*cos['
//from the last occurrence of '['

between_last ('['']''sin[90]*cos[180]');
//returns '180'
//from the last occurrence of '['
?>

here comes the source:

<?php

   
function after ($this$inthat)
    {
        if (!
is_bool(strpos($inthat$this)))
        return 
substr($inthatstrpos($inthat,$this)+strlen($this));
    };

    function 
after_last ($this$inthat)
    {
        if (!
is_bool(strrevpos($inthat$this)))
        return 
substr($inthatstrrevpos($inthat$this)+strlen($this));
    };

    function 
before ($this$inthat)
    {
        return 
substr($inthat0strpos($inthat$this));
    };

    function 
before_last ($this$inthat)
    {
        return 
substr($inthat0strrevpos($inthat$this));
    };

    function 
between ($this$that$inthat)
    {
        return 
before ($thatafter($this$inthat));
    };

    function 
between_last ($this$that$inthat)
    {
     return 
after_last($thisbefore_last($that$inthat));
    };

// use strrevpos function in case your php version does not include it
function strrevpos($instr$needle)
{
   
$rev_pos strpos (strrev($instr), strrev($needle));
    if (
$rev_pos===false) return false;
    else return 
strlen($instr) - $rev_pos strlen($needle);
};
?>
2013-07-15 17:30:21
http://php5.kiev.ua/manual/ru/function.substr.html
<?php     
$a 
'abc';   
$php 'ok123';   
$str microtime(TRUE);   
for(
$i=0;$i<=1000000;$i++)     
   
$a substr($php,1,1);   
echo 
microtime(true)-$str,"\n";                                                                                                                 
$str microtime(TRUE);   
for(
$i=0;$i<=1000000;$i++)     
   
$a $php[1];   
echo 
microtime(true)-$str;
?>
output:
0.26694822311401
0.10447096824646
2013-07-19 07:23:48
http://php5.kiev.ua/manual/ru/function.substr.html
Coming to PHP from classic ASP I am used to the Left() and Right() functions built into ASP so I did a quick PHPversion. hope these help someone else making the switch

function left($str, $length) {
    return substr($str, 0, $length);
}

function right($str, $length) {
    return substr($str, -$length);
}
2013-11-20 19:28:21
http://php5.kiev.ua/manual/ru/function.substr.html
[English]
I created python similar accesing list or string with php substr & strrev functions.

Use: str($string,$pattern)

About the python pattern,
http://docs.python.org/release/1.5.1p1/tut/strings.html
http://effbot.org/zone/python-list.htm

About of pattern structures
[start:stop:step]

Example,
<?php
$s 
"fatihmertdogancan";
echo 
str($s,"1:9:-2");
echo 
"<br/>";
echo 
str($s,"1:-3:-2");
echo 
"<br/>";
echo 
str($s,"1:-11:-5");
echo 
"<br/>";
echo 
str($s,"1:9:4");
?>

Output,
thetoacn
eht
aom
htan

This is function phpfiddle link: http://phpfiddle.org/main/code/e82-y5d

or source;

<?php
   
function str($str,$pattern){
       
//[start:stop:step]
        //pattern ->            ([-]?[0-9]*|\s):([-]?[0-9]*|\s):([-]?[0-9]*|\s)
       
preg_match("/([-]?[0-9]*|\s?):([-]?[0-9]*|\s?):?([-]?[0-9]*|\s?)/"$pattern$yakala);
       
$start $yakala[1];
       
$stop $yakala[2];
       
$step $yakala[3];
       
        if(empty(
$start) && empty($stop) && $step == "-1"){//istisna durum
           
return strrev($str);
        }else if(empty(
$start) && empty($stop) && isset($step)){//istisna durum
           
$rev "";
           
$yeni "";
            if(
$step[0] == "-" && $stop != "-1"){$rev "VAR";}
           
$atla abs($step);
            for(
$i 0$i <= strlen($str); $i++){
               
$offset $i*$atla;
                if(isset(
$str[$offset])){
                   
$yeni $yeni.$str[$offset];
                }
            }
            if(
$rev != "VAR"){
                return 
substr($yeni,0,strlen($str)-1);
               
//"hepsi boş, step dolu o da +";
           
}else{
                return 
strrev(substr($yeni,0,strlen($str)-1));
               
//"hepsi boş, step dolu o da -";
           
}
        }
       
        if(empty(
$start) && empty($stop) && empty($step)){
            return 
$str;
           
//"hepsi boş";
       
}else if(empty($start)){
            if(isset(
$stop) && empty($step)){
               
$rev "";
                if(
$stop[0] == "-"){$rev "VAR";}
                if(
$rev != "VAR"){
                    return 
substr($str,0,$stop);
                   
//"start ve step boş, stop dolu"
               
}else{
                    return 
strrev(substr($str,0,$stop));
                   
//"start ve step boş, stop -1";
               
}
            }else if(isset(
$stop) && isset($step)){
               
$rev "";
                if(
$stop[0] == "-"){$rev "VAR";}
               
$yeni "";
                if(
$step == 1){
                    if(
$rev != "VAR"){
                        return 
$str;
                       
//"start boş, stop ve step dolu, step 1";
                   
}else{
                        return 
strrev(substr($str,0,abs($stop))); //abs -> mutlak değer (-5 = 5)
                        //"start boş, stop -, step dolu, step 1";
                   
}
                }else{
                   
$atla abs($step);
                    for(
$i 0$i <= strlen($str); $i++){
                       
$offset $i*$atla;
                        if(isset(
$str[$offset])){
                           
$yeni $yeni.$str[$offset];
                        }
                    }
                    if(
$rev != "VAR"){
                        return 
substr($yeni,0,$stop);
                       
//"start boş, step ve stop dolu";
                   
}else{
                        return 
strrev(substr($yeni,0,abs($stop)));
                       
//"start boş, step ve stop -";
                   
}
                }
            }
       
//start boş değilse
       
}else if(!empty($start)){
            if(isset(
$stop) && empty($step)){
               
$rev "";
                if(
$stop[0] == "-"){$rev "VAR";}
                if(
$rev != "VAR"){
                    return 
substr($str,$start,$stop);
                   
//return "step boş, start ve stop dolu";
               
}else{
                    return 
strrev(substr($str,0,abs($stop)));
                   
//"step boş, start ve stop dolu, stop -";
               
}
            }else if(isset(
$stop) && isset($step)){
               
               
//hepsi dolu
               
$rev "";
                if(
$stop[0] == "-"){$rev "VAR";}
               
$yeni "";
                if(
$step == 1){
                    if(
$rev != "VAR"){
                        return 
substr($str,$start,$stop);
                       
//"hepsi dolu, step 1";
                   
}else{
                        return 
substr($str,$start,abs($stop));
                       
//"hepsi dolu, step 1, stop -";
                   
}
                }else{
                    if(
$stop[0] == "-"){$rev "VAR";}
                   
$atla abs($step);
                    for(
$i 0$i <= strlen($str); $i++){
                       
$offset $i*$atla;
                        if(isset(
$str[$offset])){
                           
$yeni $yeni.$str[$offset];
                        }
                    }
                    if(
$rev != "VAR"){
                        return 
substr($yeni,$start,$stop);
                       
//"hepsi dolu";
                   
}else{
                        return 
strrev(substr($yeni,$start,abs($stop)));
                       
//"hepsi dolu, stop -";
                   
}
                }
            }
        }
    }
?>

Good works..
2014-01-26 10:28:59
http://php5.kiev.ua/manual/ru/function.substr.html
For those who cannot use mb_substr for any reasons, here is a solution for Unicode strings:

function substr_unicode($str, $s, $l = null)
{
    $r = '/^.{'.(int)$s.'}(.';
    $r .= ($l === null) ? '*)$' : '{'.(int)$l.'})';
    $r .= '/su';
    preg_match($r, $str, $o); return $o[1];
}

It is EXTREMELY fast compared to the array_slice + join method suggested before, and moderately slower than mb_substr.

Note: you cannot use negative values.
Note 2: use mb_substr whenever you can. Only use this workaround if you can not use the library.
2014-03-17 19:34:15
http://php5.kiev.ua/manual/ru/function.substr.html
Frequently we want to check whether one string ends with (or starts with) another.  These may be useful:

function str_ends($string,$end){
    return (substr($string,-strlen($end),strlen($end)) === $end);
}   
function str_begins($string,$start){
    return (substr($string,0,strlen($start)) === $start);
}   

Example:
if (str_ends ($filename, ".jpg")){
   echo "The extension is .jpg";
}
2014-04-06 18:25:22
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
Truncate a float number. Similar to the Excel trunc function.

<?php
function truncate_number($val,$decimals=2){
   
       
$number=array();
       
$number=explode(".",$val);           
       
$result=0;

        if (
count($number)>1){

           
$result $number[0] . "." substr($number[1],0,$decimals); 
           
        } else {
       
           
$result $val;
           
        }               

        unset(
$number);

        return 
$result;   
}

echo 
truncate_number(99.123456,2); //result = 99.12
echo truncate_number(99.123456,5); //result = 99.12345
echo truncate_number(99.123456,1); //result = 99.1
?>
2014-06-03 11:16:00
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
substr() exhibits rather unexpected behavior with respect to when it returns "" and when it returns FALSE.  Specifically, the following appears to hold (tested on PHP 5.4.19):

*  if $string is "", it always returns FALSE

*  if ($start >= 0) and ($start >= strlen($string)) it returns FALSE

*  if ($start >= 0) and ($length<($start - strlen($string))) it returns FALSE

*  if ($start < 0) then it returns FALSE if *and only if* $length<-strlen($string).

No other cases return FALSE.
Note that in the last case, the position indicated by $start doesn't actually matter!

Also worth noting is that if you supply a $start that is < -strlen($string), it will be treated exactly as if you had set $start = strlen($string).

Here are some test cases to illustrate this behavior:

substr("",0,0) === FALSE
substr("",0,4) === FALSE
substr("",-2,4) === FALSE

substr("abc",3,0) === FALSE
substr("abc",3,10) === FALSE
substr("abc",3,-1) === FALSE
substr("abc",0,-4) === FALSE
substr("abc",2,-2) === FALSE
substr("abc",-1,-4) === FALSE
substr("abc",-4,-4) === FALSE
substr("abc",-5,-4) === FALSE
substr("abc",-10,-5) === FALSE

substr("abc",-10,-2) === "a"
substr("abc",-1,-3) === ""
substr("abc",-1,-2) === ""
substr("abc",-2,-3) === ""
substr("abc",0,0) === ""
substr("abc",-3,0) === ""
substr("abc",-10,0) === ""
substr("abc",-3,4) === "abc"
substr("abc",-10,20) === "abc"
substr("abc",-2,-2) === ""
substr("abc",-2,1) === "b"
substr("abc",0,-3) === ""
substr("abc",2,-1) === ""
2014-08-28 01:14:27
http://php5.kiev.ua/manual/ru/function.substr.html
Автор:
<?php

/**
  * Returns and extracts the portion of string specified by the
  * start and length parameters from the original string.
  *
  * This function is simulair to function substr() except that it
  * removes the substring from the orignal string 
  * (passed by reference).
  *
  * @param string $string      The input string.
  * @param integer $start      The start position (see substr() for
  *                            explanation).
  * @param integer $length     The length (see substr()
  *                            for explanation).
  * @return mixed              The substring or FALSE (see substr() 
  *                            for explanation).
  **/
function substrex(&$string$start$length PHP_INT_MAX)
{
  if(
$start strlen($string)) { return false; }
  if(empty(
$length))           { return ''; }
  if(
$start 0) { $start max(0$start strlen($string)); }
 
$end = ($length 0) ? 
   
strlen($string) + $length 
   
min(strlen($string), $start $length);
  if(
$end $start) { return false; }
 
$length $end $start;
 
$substr substr($string$start$length);
 
$string substr($string0$start).substr($string$end); 
  return 
$substr;
}

?>
2016-09-07 01:46:51
http://php5.kiev.ua/manual/ru/function.substr.html
If I may, I'd like to add an example for a bit more clarification on the action of substr(). There's a note saying "If string is equal to start characters long, an empty string will be returned. Prior to this version, FALSE was returned in this case. ".
That description puzzled me until I worked it out. So, if your string is "x" and you do 'substr("x",0, 1)' then you'll get "x" as expected. Same thing for substr("x",0,4)' or any other LENGTH parm. But if the START parm is equal to the LENGTH of the string, then you'll get an empty string (PHP 7) or FALSE (prior to PHP 7). An example of this would be 'substr("x", 1, 1)' , which would return either an empty string or FALSE. Because your "x", which has a LENGTH of '1', is in the 0th position, so 'starting' your substr request at position 1 results in the empty string (or FALSE) because there is nothing after your "x" in this example. Just trying to mitigate some head-scratching over the phrasing of the previous note.
2017-05-09 20:34:41
http://php5.kiev.ua/manual/ru/function.substr.html

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