1

可能重复:
如何在第 n 次出现针时拆分 PHP 中的字符串?

假设我有一个字符串变量:
$string = "1 2 3 1 2 3 1 2 3 1 2 3";

我想从子字符串“2”的第四次出现开始切断这个字符串的结尾,所以$string现在等于:
"1 2 3 1 2 3 1 2 3 1"
有效地切断第四次出现的“2”及其之后的所有内容。怎么做呢?我知道如何用 来计算出现次数substr_count($string,"2");,但我还没有在网上搜索到任何其他内容。

4

5 回答 5

2

要找到第四个的位置,2您可以从偏移量 0 开始并递归调用$offset = strpos($str, '2', $offset) + 1,同时跟踪到目前为止您匹配了多少个 2。一旦达到 4,您就可以使用substr().

当然,上面的逻辑并没有考虑falsereturns或者没有足够的2,我就交给你了。


您也可以使用preg_match_allwith PREG_OFFSET_CAPTUREflag 来避免自己进行递归。


另一种选择,扩展@matt 想法:

implode('2', array_slice(explode('2', $string, 5), 0, -1));
于 2013-01-20T20:23:31.743 回答
1

可能这对你有用:

$str = "1 2 3 1 2 3 1 2 3 1 2 3"; // initial value
preg_match("#((.*)2){0,4}(.*)#",$str, $m);
//var_dump($m);
$str = $m[2]; // last value
于 2013-01-20T20:26:21.423 回答
1

此代码段应该这样做:


implode($needle, array_slice(explode($needle, $string), 0, $limit));
于 2013-01-20T20:26:22.433 回答
1
$string = explode( "2", $string, 5 );
$string = array_slice( $string, 0, 4 );
$string = implode( "2", $string );

在此处查看实际操作:http ://codepad.viper-7.com/GM795F


为了增加一些混乱(因为人们不会这样做),你可以把它变成一个单行:

implode( "2", array_slice( explode( "2", $string, 5 ), 0, 4 ) );

在此处查看实际操作:http ://codepad.viper-7.com/mgek8Z


对于更理智的方法,将其放入一个函数中:

function truncateByOccurence ($haystack, $needle,  $limit) {
    $haystack = explode( $needle, $haystack, $limit + 1 );
    $haystack = array_slice( $haystack, 0, $limit );
    return implode( $needle, $haystack );
}

在此处查看实际操作:http ://codepad.viper-7.com/76C9VE

于 2013-01-20T20:29:37.987 回答
0

像这样简单的东西怎么样

$newString = explode('2',$string);

然后根据需要多次循环遍历数组:

$finalString = null;
for($i=0:$i<2;$i++){
    $finalString .= 2 . $newString[$i];
}

echo $finalString;
于 2013-01-20T20:23:47.573 回答