Проблема цикла по каждому элементу - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть массив следующим образом

$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')
);

и я хотел бы заменить «ТЕКСТ» на «СЛЕДУЮЩИЙ», если он внутри сообщения Как я мог это сделать?

Я пытался с

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

Но, похоже, не работает.

Ответы [ 5 ]

5 голосов
/ 15 февраля 2011

Это потому, что foreach по умолчанию использует копию элементов массива, а не сами элементы.Вы можете использовать &, чтобы изменить это на ссылку:

foreach ($posts as &$r) {
3 голосов
/ 15 февраля 2011
foreach ($posts as &$r)
{
    $r['message'] = str_replace('TEXT', 'NEXT', $r['message']);
}
2 голосов
/ 15 февраля 2011
 foreach ($posts as $key => $r)
{
    $posts[$key]['message'] = str_replace('TEXT', 'NEXT', $r['message']);
}
2 голосов
/ 15 февраля 2011
foreach ($posts as &$r)
{
    $r['message'] = str_replace('TEXT', 'NEXT', $r['message']);
}

И заставит $ r быть reference to значением, которое позволяет вам изменить его в исходном массиве. В своем коде вы изменяете копию.

1 голос
/ 15 февраля 2011

@ Чарли Пигарелли: попробуй -

for ($i = 0; $i < count($posts); $i++)
{
    $posts[$i]['message'] = str_replace('TEXT', 'NEXT', $posts[$i]['message']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...