valores valor str_replace obtener multidimensional modificar manejo functions elemento ejemplos comparar buscar array php arrays replace

valor - php array functions



buscar y reemplazar valor en la matriz de PHP (8)

Estaba buscando alguna función PHP estándar para reemplazar el valor de una matriz con otra, pero sorprendentemente no he encontrado ninguna, así que tengo que escribir la mía:

function array_replace_value(&$ar, $value, $replacement) { if (($key = array_search($ar, $value)) !== FALSE) { $ar[$key] = $replacement; } }

Pero todavía me pregunto: ¡ para algo tan fácil ya debe haber alguna función para ello ! ¿O tal vez una solución mucho más fácil que esta inventada por mí?

Tenga en cuenta que esta función solo hará un reemplazo. Estoy buscando soluciones existentes que de manera similar reemplacen una sola ocurrencia, así como aquellas que reemplazan todas las ocurrencias.


¿Qué pasa con array_walk() con devolución de llamada?

$array = [''*pasta'', ''cola'', ''pizza'']; $search = ''*''; $replace = ''/*''; array_walk($array, function (&$v) use ($search, $replace){ $v = str_replace($search, $replace, $v); } ); print_r($array);


Basándome en la Deept Raghav de Deept Raghav , creé la solución de seguimiento que realiza una búsqueda de expresiones regulares.

$arr = [ ''Array Element 1'', ''Array Element 2'', ''Replace Me'', ''Array Element 4'', ]; $arr = array_replace( $arr, array_fill_keys( array_keys( preg_grep(''/^Replace/'', $arr) ), ''Array Element 3'' ) ); echo ''<pre>'', var_export($arr), ''</pre>'';

PhpFiddle: http://phpfiddle.org/lite/code/un7u-j1pt


Dependiendo de si es el valor, la clave o ambos que desea encontrar y reemplazar, podría hacer algo como esto:

$array = json_decode( str_replace( $replace, $with, json_encode( $array ) ), true );

No estoy diciendo que esto sea lo más eficiente o elegante, pero agradable y simple.


En lugar de una función que solo reemplaza las apariciones de un valor en una matriz, hay un array_map más general:

array_map(function ($v) use ($value, $replacement) { return $v == $value ? $replacement : $v; }, $arr);

Para reemplazar múltiples apariciones de múltiples valores usando una matriz de valor => reemplazo:

array_map(function ($v) use ($replacement) { return isset($replacement[$v]) ? $replacement[$v] : $v; }, $arr);

Para reemplazar una sola ocurrencia de un valor, usaría array_search como lo hace. Debido a que la implementación es tan corta, no hay mucha razón para que los desarrolladores de PHP creen una función estándar para realizar la tarea. No quiere decir que no tiene sentido para usted crear una función de este tipo, si se encuentra necesitándola a menudo.


Prueba esta función.

public function recursive_array_replace ($find, $replace, $array) { if (!is_array($array)) { return str_replace($find, $replace, $array); } $newArray = []; foreach ($array as $key => $value) { $newArray[$key] = recursive_array_replace($find, $replace, $value); } return $newArray; }

¡Aclamaciones!


Si bien no hay una función equivalente al código de ejemplo, puede usar array_keys (con el parámetro de valor de búsqueda opcional), array_fill y array_replace para lograr lo mismo:

EDITADO por Tomas : el código no estaba funcionando, lo corrigió:

$ar = array_replace($ar, array_fill_keys( array_keys($ar, $value), $replacement ) );


Si el rendimiento es un problema, uno puede considerar no crear múltiples funciones dentro de array_map() . Tenga en cuenta que isset() es extremadamente rápido, y esta solución no llama a ninguna otra función.

$replacements = array( ''search1'' => ''replace1'', ''search2'' => ''replace2'', ''search3'' => ''replace3'' ); foreach ($a as $key => $value) { if (isset($replacements[$value])) { $a[$key] = $replacements[$value]; } }


<b>$green_key = array_search(''green'', $input); // returns the first key whose value is ''green''

$ input [$ green_key] = ''apple''; // reemplazar ''verde'' con ''manzana''