Как извлечь подстроку с помощью start-index и end-index?

$str = 'HelloWorld'; $sub = substr($str, 3, 5); echo $sub; // prints "loWor" 

Я знаю, что substr () принимает первый параметр, второй параметр – индекс начала, а третий параметр – длина подстроки для извлечения. Мне нужно извлечь подстроку с помощью startIndex и endIndex . Мне нужно что-то вроде этого:

 $str = 'HelloWorld'; $sub = my_substr_function($str, 3, 5); echo $sub; // prints "lo" 

Есть ли функция, которая делает это в php? Или вы можете помочь мне с обходным решением, пожалуйста?

Related of "Как извлечь подстроку с помощью start-index и end-index?"

Это просто математика

 $sub = substr($str, 3, 5 - 3); 

Длина – это конец минус начало.

 function my_substr_function($str, $start, $end) { return substr($str, $start, $end - $start); } 

Если вам нужно иметь многобилетный сейф (т. Е. Для китайских символов, …), используйте функцию mb_substr:

 function my_substr_function($str, $start, $end) { return mb_substr($str, $start, $end - $start); } 

Просто вычтите начальный индекс из конечного индекса, и у вас есть длина, которую хочет функция.

 $start_index = 3; $end_index = 5; $sub = substr($str, $start_index, $end_index - $start_index); 

Вы можете использовать отрицательное значение для третьего параметра:

 echo substr('HelloWorld', 3, -5); // will print "lo" 

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

Как указано в документации на подставку .

Не совсем…

Если у нас есть начальный индекс как 0, и мы хотим, чтобы JUST был первым символом, это становится затруднительным, поскольку это не приведет к выходу того, что вы хотите. Поэтому, если вашему коду требуется $ end_index:

 // We want just the first char only. $start_index = 0; $end_index = 0; echo $str[$end_index - $start_index]; // One way... or... if($end_index == 0) ++$end_index; $sub = substr($str, $start_index, $end_index - $start_index); echo $sub; // The other way.