2011-12-15 3 views
0

У меня есть пример кода:str_replce() не работает в цикле foreach?

$str = array(
    '1' => 'abc', 
    '2' => 'def', 
    '3' => 'abc' 
); 
foreach($str as $element) { 
$str_rep = str_replace('abc', '123', $str); 
} 
echo $str_rep; 

ВЫВОД:

$str = array(
    '1' => 'abc', 
    '2' => 'def', 
    '3' => '123' 
); 

Ошибка при '1' => 'ABC' не заменить? Как это исправить?

ответ

0

Try:

$str = array(
    '1' => 'abc', 
    '2' => 'def', 
    '3' => 'abc' 
); 
foreach($str as &$element) { 
    $element = str_replace('abc', '123', $element); 
} 
print_r($str); 

Я изменил свой Еогеасп использовать значения по ссылке

Реальная проблема была вы заменяли свой выходной переменной ($ str_rep) каждый раз в цикле. Так что, конечно, это приведет только к последнему изменению! :)

0

В вашем цикле foreach вы не имеете в виду свое значение. Попробуйте это:

foreach($str as $element) { 
    $str_rep = str_replace('abc', '123', $element); 
} 
0

Я просто побежал это:

<? 

$str = array(
    '1' => 'abc', 
    '2' => 'def', 
    '3' => 'abc' 
); 
foreach($str as &$element) { 
$str_rep = str_replace('abc', '123', $str); 
} 
var_dump($str_rep); 
?> 

И это, кажется, работает нормально?

1

Более читаемый подход:

foreach($str as $key => $value) { 
    $str[$key] = str_replace('abc', '123', $value); 
} 

Предлагайте заменить $str что-то вроде $strArray, оригинальное название вводит в заблуждение.

0

попробовать с этим:

foreach($str as $element) { 
$str_rep = str_replace('abc', '123', $element); 
}