我有一個字符串,它是未知長度和字符。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