php - 在第n个破折号之前获取字符串( - )

时间:2014-08-26 03:07:56

标签: php string

我有一个看起来像这样的字符串:

abc-def-ghi-jkl-mno-pqr-stu-vwx-yz我希望在第4次破折号之前获取内容,因此,我希望abc-def-ghi-jkl分配给新的字符串,然后我就会将其分配给新的字符串。 d喜欢将mno分配给不同的字符串。

我怎么能这样做?我尝试使用explode,但将其更改为数组,我不想这样做。

4 个答案:

答案 0 :(得分:6)

试试这个:

$n = 4; //nth dash
$str = 'abc-def-ghi-jkl-mno-pqr-stu-vwx-yz';  

$pieces = explode('-', $str);
$part1 = implode('-', array_slice($pieces, 0, $n));
$part2 = $pieces[$n];

echo $part1; //abc-def-ghi-jkl
echo $part2; //mno

See demo


http://php.net/manual/en/function.array-slice.php

http://php.net/manual/en/function.explode.php

http://php.net/manual/en/function.implode.php

答案 1 :(得分:0)

您可以添加源代码吗?我以前做过这个,但我不记得我用过的确切源代码。但我很确定我使用了爆炸,你不能避免使用数组。

编辑:Mark M回答是对的。

答案 2 :(得分:0)

你可以尝试使用substr作为另一种可能的解决方案

http://php.net/manual/en/function.substr.php

如果我看到你想要的地方,你也可以进入substr_replace

答案 3 :(得分:0)

我想爆炸的替代方法是找到第4个位置 - 在字符串中然后从字符串的开头到该字符获得一个子字符串。

您可以使用find the second occurrence of a char in a string php中解释的方法使用循环找到位置,然后使用substr(string,0,pos)来获取子字符串。

$string = "abc-def-ghi-jkl-mno-pqr-stu-vwx-yz";
$pos = -1;
for($i=0;$i<4;$i++)
     $pos = strpos($string, '-', $pos+1);
echo substr($string, 0, $pos);

代码未经过测试,但过程很容易理解。你从第一个字符(0)开始,找到一个 - 然后在下一个循环中从那个位置开始+1。循环重复它一定次数,然后你得到从开始到最后的子串 - 你找到了。