假设我有一个字符串变量:
$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");
,但我还没有在网上搜索到任何其他内容。
要找到第四个的位置,2
您可以从偏移量 0 开始并递归调用$offset = strpos($str, '2', $offset) + 1
,同时跟踪到目前为止您匹配了多少个 2。一旦达到 4,您就可以使用substr()
.
当然,上面的逻辑并没有考虑false
returns或者没有足够的2,我就交给你了。
您也可以使用preg_match_all
with PREG_OFFSET_CAPTURE
flag 来避免自己进行递归。
另一种选择,扩展@matt 想法:
implode('2', array_slice(explode('2', $string, 5), 0, -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
此代码段应该这样做:
implode($needle, array_slice(explode($needle, $string), 0, $limit));
$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
像这样简单的东西怎么样
$newString = explode('2',$string);
然后根据需要多次循环遍历数组:
$finalString = null;
for($i=0:$i<2;$i++){
$finalString .= 2 . $newString[$i];
}
echo $finalString;