Строка заменяет все элементы в массиве PHP

Я хотел бы сделать замену строки во всех элементах массива. Что у меня есть:

$row['c1'] = str_replace("&", "&", $row['c1']);
$row['c2'] = str_replace("&", "&", $row['c2']);
$row['c3'] = str_replace("&", "&", $row['c3']);
$row['c4'] = str_replace("&", "&", $row['c4']);   
$row['c5'] = str_replace("&", "&", $row['c5']);
$row['c6'] = str_replace("&", "&", $row['c6']);
$row['c7'] = str_replace("&", "&", $row['c7']);   
$row['c8'] = str_replace("&", "&", $row['c8']);
$row['c9'] = str_replace("&", "&", $row['c9']);
$row['c10'] = str_replace("&", "&", $row['c10']); 

Как я могу добиться этого с меньшим количеством кода? Я думал, что оператор foreach будет работать, например:

$columns = array($row['c1'], $row['c2'], $row['c3'], $row['c4'], $row['c5'], $row['c6'], $row['c7'], $row['c8'], $row['c9'], $row['c10']);

foreach ( $columns as $value){
   $value   = str_replace("&", "&", $value);
}

Но это не работает.


person AJFMEDIA    schedule 18.02.2011    source источник


Ответы (3)


Просто сделать:

$row = str_replace("&", "&", $row);

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

foreach ( $columns as &$value) { // reference
   $value  = str_replace("&", "&", $value);
}
unset($value); // break the reference with the last element

Or:

foreach ($columns as $key => $value){
   $columns[$key]  = str_replace("&", "&", $value);
}

Хотя здесь это и не нужно, потому что str_replace принимает и возвращает массивы.

person netcoder    schedule 18.02.2011
comment
ты понял, чувак ... я не знал, что str_replace тоже принимает arrays - person Ish; 18.02.2011
comment
Как бы вы использовали этот метод для замены строки во второй части массива. ('строка массива 1','строка массива 2') это пример строки. - person DIM3NSION; 16.04.2012

Вы должны вызывать его по ссылке, иначе foreach создаст дубликат $value

foreach ( $columns as &$value)

person Ish    schedule 18.02.2011

Другим решением является использование PHP array_walk, например это:

function custom_replace( &$item, $key ) {
   $item = str_replace('22', '75', $item);
} 

// Init dummy array.
$columns = array('Cabbage22', 'Frid22ay', 'Internet', 'Place22', '22Salary', '22Stretch', 'Whale22Inn');

// Print BEFORE.
echo 'Before: ';
print_r($columns);

// Make the replacements.
array_walk($columns, 'custom_replace');

// Print AFTER.
echo 'After:';
print_r($columns);

Выход:

Before: Array
(
    [0] => Cabbage22
    [1] => Frid22ay
    [2] => Internet
    [3] => Place22
    [4] => 22Salary
    [5] => 22Stretch
    [6] => Whale22Inn
)
After: Array
(
    [0] => Cabbage75
    [1] => Frid75ay
    [2] => Internet
    [3] => Place75
    [4] => 75Salary
    [5] => 75Stretch
    [6] => Whale75Inn
)
person mr.baby123    schedule 19.05.2015