Подтвердить что ты не робот

Как извлечь подстроку с помощью 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? Или вы можете помочь мне с обходным решением, пожалуйста?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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);
}

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

Не совсем...

Если у нас есть начальный индекс как 0, и мы хотим, чтобы JUST первый char, это становится затруднительным, так как это не приведет к тому, что вы хотите. Поэтому, если вашему коду требуется $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.