Ответ 1
Это просто математика
$sub = substr($str, 3, 5 - 3);
Длина - это конец минус начало.
$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? Или вы можете помочь мне с обходным решением, пожалуйста?
Это просто математика
$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"
Если длина задана и отрицательна, то многие символы будут опущены в конце строки (после того, как начальная позиция была рассчитана, когда начало отрицательно).
Как указано в документации substr.
Не совсем...
Если у нас есть начальный индекс как 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.