我有一个字符串,它是未知长度和字符。x个字符后截断字符串
我希望能够在x个字符后截断字符串。
例如来自:
$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4
我想回:
"Hello# m#y name # is Ala#"
希望我没有在这里复杂的事情!
非常感谢
我有一个字符串,它是未知长度和字符。x个字符后截断字符串
我希望能够在x个字符后截断字符串。
例如来自:
$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4
我想回:
"Hello# m#y name # is Ala#"
希望我没有在这里复杂的事情!
非常感谢
function posncut($input, $delim, $x) {
$p = 0;
for($i = 0; $i < $x; ++ $i) {
$p = strpos($input, $delim, $p);
if($p === false) {
return "";
}
++ $p;
}
return substr($input, 0, $p);
}
echo posncut($string, $character, $x);
它发现依次在每个分隔符(strpos
)和你要找的人后停止。如果第一个文本用完(strpos
返回false
),它会给出一个空字符串。
更新:这是我制作的一个基准,它将此方法与爆炸进行比较:http://codepad.org/rxTt79PC。似乎explode
(当与array_pop
而不是array_slice
一起使用时)更快。
我建议explode
-在#
上的字符串,然后获取该数组中的前4个元素。
$string = "Hello# m#y name # is Ala#n Colem#n";
$character = "#";
$x = 4;
$split = explode($character, $string);
$split = array_slice($split, 0, $x);
$newString = implode($character, $split).'#';
这些方针的东西:
$str_length = strlen($string)
$character = "#"
$target_count = 4
$count = 0;
for ($i = 0 ; $i<$str_length ; $i++){
if ($string[$i] == $character) {
$count++
if($count == $target_count) break;
}
}
$result = sub_str($string,0,$i)
你的意思是,在本例中的问题,一切都交给的“#” 4日发生? – AD7six 2013-03-06 17:40:23
这是正确的,我想必须有一个PHP函数,这意味着我不必循环? – Boomfelled 2013-03-06 17:42:21
用'strtok'构建一个新字符串的循环看起来效率最高。当然,你可以使用'$ arr = explode($ character,$ string,$ x + 1); $ newstring = implode('#',array_slice($ arr,0,4))''route。 – Wrikken 2013-03-06 17:42:56