str_replace не работает с foreach

#php #foreach #str-replace

#php #foreach #str-replace

Вопрос:

Мой код:

 $str = array(
        '{$string1}' => 'anything2',
    '{$string2}' => 'something1',
    '{$string3}' => '...'
);

$final = "";
$text = $_POST['content'];
foreach( $str as $key => $val ) {
      $final = str_replace($key, $val, $text);
}
 

Мой $text офк. имеет {string1} {string2} и {string3} сам по себе, но он не заменяет его значениями, заданными в массиве.

Почему он не работает?

Комментарии:

1. Что возвращает $ final?

2. Вы имели в виду присваивать, а не добавлять к финалу? У вас есть =, но, может быть, вы хотите.=.

3. @mqsoh Мне просто нужно $_POST['content'] , чтобы содержимое было заменено значениями в массиве, мне не нужно ничего добавлять.

Ответ №1:

Этот код делает именно то, что вам нужно (без каких-либо дополнительных циклов):

 $final = strtr($_POST['content'], $str);
 

Ответ №2:

используйте

  $final = str_replace('{'.$key.'}', $val, $text);
 

Ссылка: http://php.net/manual/en/function.str-replace.php

Ответ №3:

Возможно, другое завершение, попробуйте это:

$text = utf8_decode($_POST[‘content’]);// или utf8_encode

перед циклом;

Удачи!