iT邦幫忙

0

str_replace 如果都有 0 都會被取代....

str_replace(substr($_SESSION['phone'], 0, 1), '+886', $_SESSION['phone']);

假設我是 0911012123
他就會取代成
+886911+88612123

但明明就有只取左邊開始的第一個再改成 +886
是哪裡錯了?....

補充

喔我大概知道了,他取得的是0沒錯,但 str_replace 會把所有 0 改成 +886

看更多先前的討論...收起先前的討論...
黃彥儒 iT邦高手 1 級 ‧ 2018-08-17 17:38:38 檢舉
轉整數再轉回字串,0就不見了
神Q超人 iT邦研究生 5 級 ‧ 2018-08-17 17:40:49 檢舉
也可以參考這篇文章,取代第一個出現的相符字:
https://stackoverflow.com/questions/1252693/using-str-replace-so-that-it-only-acts-on-the-first-match
火爆浪子 iT邦研究生 1 級 ‧ 2018-08-17 18:11:54 檢舉
太神了這個! 神Q超人 幫我回答一下吧,我選一下最佳
weiclin iT邦高手 4 級 ‧ 2018-08-17 18:58:53 檢舉
這樣就好了啊...哪有那麼麻煩
"+886" . substr($phone, 1);
神Q超人 iT邦研究生 5 級 ‧ 2018-08-17 19:26:05 檢舉
哈哈,謝謝妳!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
神Q超人
iT邦研究生 5 級 ‧ 2018-08-17 19:36:52
最佳解答

可以參考一下這篇文章:
https://stackoverflow.com/questions/1252693/using-str-replace-so-that-it-only-acts-on-the-first-match
依照範例把程式改成這樣:

function str_replace_first($from, $to, $content)
{
    $from = '/'.preg_quote($from, '/').'/';
    return preg_replace($from, $to, $content, 1);
}

echo str_replace_first('0', '+886', $_SESSION['phone']); 

主要是換成使用preg_replace()來做字串取代,因為他第四個參數可以控制取代次數,詳細說明可以看這裡:PHP preg_replace 函式基本語法
上述的例子是將要尋找的字字串加上正規表示法,如果沒有特殊符號應該也可以直接使用:

preg_replace('0', '+886', $_SESSION['phone'],1)

因為小弟沒有寫過PHP,所以如果以上回答有問題再麻煩下方留言告訴我/images/emoticon/emoticon41.gif

我要發表回答

立即登入回答