String заменить все элементы в массиве 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);
}
Но это не сработает.
Ответы
Ответ 1
Просто выполните:
$row = str_replace("&", "&", $row);
Примечание. Ваш foreach не работает, потому что вам нужна ссылка или используйте ключ:
foreach ( $columns as &$value) { // reference
$value = str_replace("&", "&", $value);
}
unset($value); // break the reference with the last element
Или:
foreach ($columns as $key => $value){
$columns[$key] = str_replace("&", "&", $value);
}
Хотя здесь нет необходимости, потому что str_replace
принимает и возвращает массивы.
Ответ 2
Вы должны называть его ссылкой, иначе foreach
создает дублируемую копию $value
foreach ( $columns as &$value)
Ответ 3
Другим решением является использование 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
)