2011-02-18 11 views
11

Me gustaría hacer una cadena de reemplazo en todos los elementos de una matriz. Lo que tengo es:Cadena reemplazar todos los elementos en la matriz 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']); 

¿Cómo puedo lograr esto con menos código? Pensé que una declaración de Foreach funcionaría, por ejemplo:

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

Pero no funciona.

Respuesta

29

Just Do:

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

Nota: Su foreach no funciona porque se necesita una referencia, o use la tecla:

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

O:

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

Aunque no es necesario aquí porque str_replace acepta y devuelve arra ys.

+1

lo tienes hombre ... no sabía que 'str_replace' acepta' arrays' también – Ish

+0

¡tan simple que ni siquiera pensé! Gracias – AJFMEDIA

+0

¿Cómo usarías este método para reemplazar una cadena en la segunda parte de una matriz? ('array string 1', 'array string 2') esta es una fila de ejemplo. – DIM3NSION

2

Debería llamarlo por referencia, de lo contrario foreach crea una copia duplicada de $value

foreach ($columns as &$value)

0

Otra solución es usar PHP array_walk así:

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

Salida:

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 
) 
Cuestiones relacionadas