me gustaría combinar dos matrices entre sí:¿Cómo fusionar dos matrices tomando solo los valores de la segunda matriz que tiene las mismas claves que la primera?
$filtered = array(1 => 'a', 3 => 'c');
$changed = array(2 => 'b*', 3 => 'c*');
Mientras que la fusión debe incluir todos los elementos de $filtered
y todos aquellos elementos de $changed
que tienen una clave correspondiente en $filtered
:
$merged = array(1 => 'a', 3 => 'c*');
array_merge($filtered, $changed)
agregaría las claves adicionales de $changed
en $filtered
también. Entonces realmente no encaja.
Sé que puedo usar $keys = array_intersect_key($filtered, $changed)
para obtener las claves que existen en ambas matrices, que ya es la mitad del trabajo.
Sin embargo, me pregunto si hay alguna función (nativa) que pueda reducir la matriz $changed
en una matriz con el $keys
especificado por array_intersect_key
? Sé que puedo usar array_filter
con una función de devolución de llamada y verificar contra $keys
allí, pero probablemente exista otra función puramente nativa para extraer solo aquellos elementos de una matriz de la cual se pueden especificar las claves.
Pregunto porque las funciones nativas a menudo son mucho más rápidas que array_filter
con una devolución de llamada.
Unión contra la intersección. Pero union agregará claves de '$ filtered' también AFAIK. Lo probaré. – hakre
Pensé que agregar las claves de '$ filtered' era el punto ...? – deceze
Jup. Acabo de probarlo, es mi culpa;). Funciona bastante bien, solo cambia el orden de las teclas, pero eso no es un problema ya que las tengo como un índice numérico, así que ksort hace el trabajo. Perfecto. ¡Muchas gracias! – hakre