我有這種情況:追加和控制,如果一個字符串包含字符串中的x位置一個char [遞歸]
$asd = "Hey hello world!";
現在我想知道我可以追加(如果不存在)遞歸(每3個字符)一個字符(例如:「J」)...從左到右解析字符串?
這樣的結果將是:
$asd = "HeyJ heJlloJ woJrldJ!";
我有這種情況:追加和控制,如果一個字符串包含字符串中的x位置一個char [遞歸]
$asd = "Hey hello world!";
現在我想知道我可以追加(如果不存在)遞歸(每3個字符)一個字符(例如:「J」)...從左到右解析字符串?
這樣的結果將是:
$asd = "HeyJ heJlloJ woJrldJ!";
如何:
$str = "Hey hello world!";
for($i=3; $i<strlen($str); $i+=4) {
if ($str[$i] != 'J')
$str = substr_replace($str, 'J', $i, 0);
}
echo $str,"\n";
輸出:
HeyJ heJlloJ woJrldJ!
你可以這樣來做:
if(substr($asd, 3, 1) !== 'J')
{
$asd = substr($asd, 0, 3)."J".substr($asd, 3);
}
除非你知道一個事實,該字符串$ ASD超過三個字符,你還應該檢查長以前的字符串的長度爲:
if(strlen($asd) > 3 && substr($asd, 3, 1) !== 'J')
{
$asd = substr($asd, 0, 3)."J".substr($asd, 3);
}
最後,上述方法對單個字符cters以及多個字符序列,但如果你只關心一個字符,你可以只使用字符串索引來檢查字符是存在的,就像這樣:如果你需要就去做每3個charachters
if(strlen($asd) > 3 && $asd[3] !== 'J')
{
$asd = substr($asd, 0, 3)."J".substr($asd, 3);
}
把它放在一個循環:
$pos = 0;
while(true)
{
// go to the position of the next character of interest
$pos += 3;
// if the next pos is past the end of the string break out of the loop
if(strlen($asd) <= $pos)
break;
if($asd[$pos] !== 'J')
{
$asd = substr($asd, 0, $pos)."J".substr($asd, $pos);
$pos++;
}
}
注意
如果您正在編輯這樣的字符串是大,並且需要修改出現的次數也是相當大的,你可以優化algorit HM,使得其首先找到其中字符需要要插入的位置,然後分割原始字符串分成子字符串數組,然後使用控制字符作爲使用木匠連接它們全部一起array_join
所以這段代碼是完美的!但我要編輯我的問題,因爲我寫了那麼糟糕:/ ...對不起這個..無論如何,正確的邏輯將追加如果不存在於x位置遞歸...:P – sbaaaang
這是不遞歸。只是做一個循環.. –
opss ..沒關係..只是最後一步是檢查是否存在「J」遞歸,如果存在應該不加:P .. thx! – sbaaaang
@Ispuk:我編輯了我的答案。 – Toto