Foreach循环问题

时间:2011-02-15 13:50:05

标签: php loops foreach

我有一个数组如下

$posts = array(
    0 => array('user' => 'Charlie', 'message' => 'First message'),
    1 => array('user' => 'Charlie', 'message' => 'Second message'),
    2 => array('user' => 'Charlie', 'message' => 'Third message TEXT!'),
    3 => array('user' => 'Charlie', 'message' => 'Fourth message')
);

如果它在消息里面,我想用“NEXT”替换“TEXT”。 我怎么能这样做?

我试过

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

但似乎没有工作。

5 个答案:

答案 0 :(得分:5)

这是因为默认情况下foreach使用数组元素的副本,而不是元素本身。您可以使用&将其更改为参考:

foreach ($posts as &$r) {

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

&将导致$ r为reference to该值,允许您在原始数组中更改它。在您的代码中,您正在修改副本。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

@Charlie Pigarelli:试试 -

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