如何通过start-index和end-index提取子字符串?

时间:2011-08-11 21:35:12

标签: php

$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中有没有这样做的功能?或者,您可以帮我解决一下解决方案吗?

5 个答案:

答案 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.