ホームページ >バックエンド開発 >PHPチュートリアル >php -str_replace は置換を横断できません

php -str_replace は置換を横断できません

WBOY
WBOYオリジナル
2016-06-23 13:38:441076ブラウズ

次のコードを参照してください
585e7bb9d908224df69e8845febc0ec7' k ','w'=>'q','e'=>r','t'=>y','m'=>5);
foreach ($data as $k); = > $v) {
foreach ($arr as $key => $value) {
$pattern = $key;
$data[$k] = str_replace; replace ,$v);//置き換えることはできませんか? ?
// $data[$k] = str_replace(array_keys($arr),$arr,$v);
// $data[$k] = str_replace('l','k',$v); }
}

var_dump($data);
?> arr に移動してそれらを照合し、必要に応じて置き換えます。この場合は、次のように記述します:

<?php$data = array('or','my','you','which','love');$pattern = array('l','w','e','t','m');$arr = array('k','q','r','y',5);$newdata =  str_replace($pattern, $arr, $data);var_dump($newdata);?>

$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 in

は $data[$k] のコピーです

レイヤーループに含まれます
$data[$k] = str_replace($pattern,$replacment, $v); $v は変更されていないため、すべての置換は、最後の置換結果ではなく、元のデータに対して行われます



foreach ($data as $k => &$v) {

と書くと、それが機能することがわかります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。