multidimensional modificar elementos elemento concatenar combine array agregar php arrays merge overwrite

elementos - modificar elemento de un array php



Fusionar matriz "Predeterminada" con matriz "Entrada"? PHP ¿Qué función? (5)

Digamos que está haciendo que un usuario proporcione información.

Array 1

Pero no todo es requerido. Entonces tienes valores predeterminados.

Array 2

¿PHP tiene una función que sobrescribirá todos los valores de Array 2 de Array 2 función de si se suministran en el Array 1 y no están vacíos?


Puedes hacer algo como

foreach($array1 as $key=>$value) $array2[$key]=$value;



No estoy seguro de que ninguna de estas respuestas te esté ayudando (no me ayudaron) especialmente para el caso en que tus "defualts" pueden ser una matriz asociativa de más de un nivel de profundidad.

Creo que lo que estás buscando es array_replace_recursive .
$finalArray = array_replace_recursive(array $defaults, array $inputOptions)

he aquí un ejemplo que toma una matriz opcional de opciones para una función y realiza un procesamiento basado en el resultado de esas opciones " opts " y los defaults que usted especifica:

function do_something() { $args = func_get_args(); $opts = $args[0] ? $args[0] : array(); $defaults = array( "second_level" => array( "key1" => "val1", "key2" => "val2" ), "key1" => "val1", "key2" => "val2", "key3" => "val3" ); $params = array_replace_recursive($defaults, $opts); // do something with these merged parameters }

Compruébalo aquí


$defaults = array( ''some_key_1''=>''default_value_1'', ''some_key_2''=>''default_value_2'', ); $inputs = array_merge($defaults, $inputs)


Si solo desea mantener las opciones que espera y descartar el resto, puede usar una combinación de array_merge y array_intersect_key .

<?php function foo($options) { $defaults = [ ''a'' => 1, ''b'' => null, ]; $mergedParams = array_merge( $defaults, array_intersect_key($options, $defaults) ); return $mergedParams; } var_dump(foo([ ''a'' => ''keep me'', ''c'' => ''discard me'' ])); // => output // // array(2) { // ["a"]=> // string(7) "keep me" // ["b"]=> // NULL // }

Si, por el contrario, desea conservar una clave adicional, array_merge($defaults, $options) perfectamente.