在给定位置将两个字符串分开

Qia*_*iao 16 php string

$string = 'Some string';
$pos = 5;

...??...

$begging // == 'Some s';
$end // == 'tring';
Run Code Online (Sandbox Code Playgroud)

在给定位置将字符串分成两部分的最佳方法是什么?

Gum*_*mbo 32

您可以使用substr获取两个子字符串:

$str1 = substr($str, 0, $pos);
$str2 = substr($str, $pos);
Run Code Online (Sandbox Code Playgroud)

如果省略第三个参数长度,则substr取其余的字符串.

但要获得结果,您实际上需要添加一个$pos:

$string = 'Some string';
$pos = 5;
$begin = substr($string, 0, $pos+1);
$end = substr($string, $pos+1);
Run Code Online (Sandbox Code Playgroud)

  • 在处理多字节字符串时要小心! (7认同)
  • 通过使用`$ pos + 1`,你省略了一个角色.给定5美元的$ pos,你最终会得到"一些"和"tring" (2认同)

rub*_*ots 22

正则表达式解决方案(如果你进入它):

...
$string = 'Some string xxx xxx';
$pos = 5;

list($beg, $end) = preg_split('/(?<=.{'.$pos.'})/', $string, 2);

echo "$beg - $end";
Run Code Online (Sandbox Code Playgroud)

问候

RBO

  • 哦,我明白了,如果我回答一个PHP问题并且**不要重复明显的解决方案(到目前为止给出了相同的四次)并试图显示替代方案,我将被同行贬低.太好了! (12认同)
  • 只有一种方法来解决这个问题......快!有人做基准性能测试并比较结果! (4认同)
  • 在我的测试中,正则表达式比substr快5倍(7.7009201049805E-5 vs 0.12504506111145毫秒) (3认同)
  • 我喜欢单行:3 (2认同)
  • @rubberboots 这是因为人们不理解它。不要因为它大头,你的解决方案很棒。我喜欢在代码中保存行数的人。谢谢 (2认同)
  • 我更喜欢这个解决方案,因为它返回一个类似于 expand() 的数组,但基于位置。 (2认同)
  • 感谢您的解决方案。我喜欢它不同,更快,返回一个数组并且不使用 substr()。你摇滚! (2认同)