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


Get string before nth dash (-)

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

abc-def-ghi-jkl-mno-pqr-stu-vwx-yz我想在第4个破折号之前获得内容,所以实际上,我想将abc-def-ghi-jkl分配给一个新字符串,然后将mno分配给另一个字符串。

我该怎么做呢?我试着使用explode,但这把它改成了数组,我不想那样做。

试试这个:

$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

查看演示


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

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

编辑:马克M的答案是对的。

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

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

如果我看到你想从哪里得到这个,你也可以进入substra_replace

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

您可以使用循环找到位置,方法解释为在字符串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开始。循环重复一定次数,然后得到从开始到最后的子字符串。