php -str_replace無法遍曆替換

來源:互聯網
上載者:User
見如下代碼
$data = array('or','my','you','which','love');
$arr = array('l'=>'k','w'=>'q','e'=>'r','t'=>'y','m'=>5);
foreach ($data as $k => $v) {
foreach ($arr as $key => $value) {
$pattern = $key;
$replacment = $value;
$data[$k] = str_replace($pattern,$replacment,$v);//無法替換??
// $data[$k] = str_replace(array_keys($arr),$arr,$v);
// $data[$k] = str_replace('l','k',$v);
}
}

var_dump($data);
?>


回複討論(解決方案)

不知道樓主說的替換指的是不是把data裡面每個字串中出現過的字元都去arr裡面去匹配下,有的換就替換。如果是這樣的話 直接這樣寫就可以了:

 

$data[$k] = str_replace($pattern,$replacment,$v);
這句裡面$v重新複製了,換成$data[$k]
$data[$k] = str_replace($pattern,$replacment,$data[$k]);

謝謝,我知道這樣子寫可以做到替換的效果,但是我的疑惑是為什麼上面用foreach替換為什麼不行呢?錯在哪兒了呢。。

$data[$k] = str_replace($pattern,$replacment,$v);
$data[$k] 被迴圈的賦值,取最後一次賦值的結果.

謝謝,我知道這樣子寫可以做到替換的效果,但是我的疑惑是為什麼上面用foreach替換為什麼不行呢?錯在哪兒了呢。。


你在迴圈中把$pattern $replacement $data[$k]都列印出來看看 應該就比較清晰了

0 orororororor1 mymymymymy5y2 youyouyouyouyouyou3 whichwhichqhichwhichwhichwhich4 lovekovelovelovrlovelove


樓主這是我列印出來的迴圈結果,其實在foreach中。str_replace已經生效,但是被後面的替換了,所以你才覺得沒有替換

foreach ($data as $k => $v) {
中的 $v 是 $data[$k] 的副本
在內層迴圈中
$data[$k] = str_replace($pattern,$replacment, $v);
$v 並沒有改變,所以所有的替換都是對未經處理資料,而不是對上次替換結果的

如果你寫作
foreach ($data as $k => &$v) {
就可以看到,的確是起作用了

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.