$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中有没有这样做的功能?或者,您可以帮我解决一下解决方案吗?
答案 0 :(得分:74)
这只是数学
$sub = substr($str, 3, 5 - 3);
长度是结束减去开始。
答案 1 :(得分:15)
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);
}
答案 2 :(得分:7)
只需从结束索引中减去起始索引,就可以得到函数所需的长度。
$start_index = 3;
$end_index = 5;
$sub = substr($str, $start_index, $end_index - $start_index);
答案 3 :(得分:4)
您可以在第三个参数上使用负值:
echo substr('HelloWorld', 3, -5);
// will print "lo"
如果给出长度并且为负数,那么将从字符串的末尾省略那么多字符(在开始为负时计算起始位置之后)。
正如substr documentation所述。
答案 4 :(得分:1)
不完全......
如果我们将起始索引设为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.