2011-02-15 29 views
0

は、私は配列を持っていると私はそれがメッセージ内だ場合、「NEXT」と「TEXT」を交換したいと思います。 どうすればいいですか?foreachループの問題

私は

foreach ($posts as $r) 
{ 
    $r['message'] = str_replace('TEXT', 'NEXT', $r['message']); 
} 

を試みたが、動作していないようです。デフォルトでforeachではなく要素自体よりも、配列要素のコピーを使用しているためだ

+1

を使用し、'&。ループの直後に 'unset($ r) 'することを忘れないでください。そうしないと、配列の最後にアクセスされた要素の値を誤って変更する可能性があります。 – binaryLV

+2

私はすべての生産コードを汚い言葉で明るくしていますが、実際には開発プロセスの重要な部分だと考えていますが、私はSOをきれいに保つべきだと思います。ごめんなさい!! :) –

+0

あなたは答えの半分が意味をなさないように質問を変更しました。 –

答えて

3
foreach ($posts as &$r) 
{ 
    $r['message'] = str_replace('TEXT', 'NEXT', $r['message']); 
} 
+0

'&'は何を意味しますか? – Shoe

+1

@Charlie Pigarelli: '&'はあなたが要素への参照を持っていることを意味します。それ以外の場合は、配列の* copy *だけをループします。 http://php.net/manual/en/control-structures.foreach.phpのドキュメントを参照してください。これはうまくいかない場合は別のエラーが発生します。 –

5

。あなたは、参照にこれを変更する&を使用することができます。

foreach ($posts as &$r) { 
2
foreach ($posts as &$r) 
{ 
    $r['message'] = str_replace('TEXT', 'NEXT', $r['message']); 
} 

&は$ rはあなたが元の配列の内側にそれを変更することができますreference to値であることになります。あなたのコードでは、コピーを変更しています。

1

@Charlie Pigarelli:試してみてください - `多くは示唆してきたように、

for ($i = 0; $i < count($posts); $i++) 
{ 
    $posts[$i]['message'] = str_replace('TEXT', 'NEXT', $posts[$i]['message']); 
} 
+0

Wow ...説明なしでもう一つの実用的なソリューションを提供して下さった。ありがとう、ランダムな臆病者。 – stealthyninja

+0

私はあなたが冒涜を使用しているため、人々があなたの投稿を下降させている/フラグを立てていると思います。あなたが気にするかどうかはあなた次第です。 (私はそれらの人々の一人ではなかった) –

+0

@Cody Grey:私はそれを疑う、そうでなければ誰もが(OPのポストを含む)同様に投票されて落ちるだろう。 – stealthyninja

2
foreach ($posts as $key => $r) 
{ 
    $posts[$key]['message'] = str_replace('TEXT', 'NEXT', $r['message']); 
}