Связь с администрацией сайта:       

demo

Среди толпы я одинок

Строковая функция PHP: substr — Возвращает подстроку

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

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

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

 

string

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

start

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

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

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

length

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

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

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

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

Примеры использования substr в PHP:

 

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

 

<?php$rest = substr("iamalone", -1);    // возвращает "e"$rest = substr("iamalone", -2);    // возвращает "ne"$rest = substr("iamalone", -3, 1); // возвращает "o"?>





 

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



<?php
$rest = substr("iamalone", 0, -1); // возвращает "iamalon"$rest = substr("iamalone", 2, -1); // возвращает "malon"$rest = substr("iamalone", 4, -4); // возвращает false$rest = substr("iamalone", -3, -1); // возвращает "on"?>


Пример #3 Базовое использование substr()
<?phpecho substr('abcdef', 1);     // bcdefecho substr('abcdef', 1, 3);  // bcdecho substr('abcdef', 0, 4);  // abcdecho substr('abcdef', 0, 8);  // abcdefecho substr('abcdef', -1, 1); // f
 // Получить доступ к отдельному символу в строке// можно также с помощью "квадратных скобок"$string = 'abcdef';echo $string[0];                 // aecho $string[3];                 // decho $string[strlen($string)-1]; // f
 ?>


Пример #4 substr() и приведение типов
<?phpclass apple {
    public function __toString() {
        return "green";
    }}
 echo "1) ".var_export(substr("pear", 0, 2), true).PHP_EOL;echo "2) ".var_export(substr(54321, 0, 2), true).PHP_EOL;echo "3) ".var_export(substr(new apple(), 0, 2), true).PHP_EOL;echo "4) ".var_export(substr(true, 0, 1), true).PHP_EOL;echo "5) ".var_export(substr(false, 0, 1), true).PHP_EOL;echo "6) ".var_export(substr("", 0, 1), true).PHP_EOL;echo "7) ".var_export(substr(1.2e3, 0, 4), true).PHP_EOL;?>


Интересная информация использования substrв PHP:

 

 - В PHP 7.0.0

 

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

 

 - В PHP 5.2.2 - 5.2.6

 

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

 

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

 

<?phpvar_dump(substr('a', 2)); // bool(false)?>


- Для получения подстроки символов UTF-8, я настоятельно рекомендую mb_substr

<?php
        $utf8string = "cakeæøå";
 
        echo substr($utf8string,0,5);
        // output cake#
        echo mb_substr($utf8string,0,5,'UTF-8');
        //output cakeæ?>
 
- Может быть, следующими функциями будет легче извлечь нужные части из строки:
<?php
after ('@'>, 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.');//вернет 'online.ge'//от первого появления '@'>
 
before ('@'>, 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.');// вернет 'biohazard'// от первого появления '@'>
 
between ('@'>, '.', 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.');// вернет 'online'// от первого появления '@'>
 
after_last ('[', 'sin[90]*cos[180]');// вернет '180]'// от последнего появления '['
 
before_last ('[', 'sin[90]*cos[180]');// вернет 'sin[90]*cos['// от последнего появления '['
 
between_last ('[', ']', 'sin[90]*cos[180]');// вернет '180'// от последнего появления '['?>


Сами функции
<?php
 
    function after ($this, $inthat)
    {
        if (!is_bool(strpos($inthat, $this)))
        return substr($inthat, strpos($inthat,$this)+strlen($this));
    };
 
    function after_last ($this, $inthat)
    {
        if (!is_bool(strrevpos($inthat, $this)))
        return substr($inthat, strrevpos($inthat, $this)+strlen($this));
    };
 
    function before ($this, $inthat)
    {
        return substr($inthat, 0, strpos($inthat, $this));
    };
 
    function before_last ($this, $inthat)
    {
        return substr($inthat, 0, strrevpos($inthat, $this));
    };
 
    function between ($this, $that, $inthat)
    {
        return before ($that, after($this, $inthat));
    };
 
    function between_last ($this, $that, $inthat)
    {
     return after_last($this, before_last($that, $inthat));
    };
 // Используйте функцию strrevpos, если ваша версия php не включает его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);};?>


- Любой, кто приходит из мира Python, будет привыкать к созданию подстрок, используя «индекс фрагмента» в строке. Следующая функция эмулирует основное поведение последовательности строк Python. (Более сложная версия может быть создана для поддержки ввода массива, а также строки и необязательного третьего аргумента «step»).



<?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, $start, 1);
    }
    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";
 ?>
 

 


Параметр $ slice может быть одним символьным индексом или диапазоном, разделенным двоеточием. Начало диапазона включено, и конец является исключительным, что может противоречить интуиции. (Например, py_slice ('abcdefg', '2: 4') дает 'cd', а не 'cde'). Значение отрицательного диапазона означает отсчет от конца строки, а не от начала. И начало, и конец диапазона можно опустить; Начало по умолчанию равно 0, а по умолчанию используется общая длина ввода.

 

Результат:

 

c

 

cd

 

cdefg

 

abcd

 

abcd

 

efg

- Вы можете ожидать, что substr ('123456', 6) вернет пустую строку. Вместо этого возвращается логический FALSE. Если вам нужна пустая строка вместо логического FALSE, вы должны привести результат к строке.

 

<?php$a=substr('123456',6);// $a = FALSE $a=(string)substr('123456',6);// $a = ''; ?>

- Здесь мы имеем функцию gr8, которая просто преобразует ip-адрес в число, используя substr с отрицательным смещением. Она может понадобиться, если вы хотите сравнить некоторые IP-адреса, преобразованные в числа. Например, при использовании ip2country или исключении такого же диапазона IP-адресов с вашего сайта.

 

<?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 !';    } 
 ?>


 

 

Rate this item
(1 Vote)
Login to post comments