En un proyecto personal que estoy desarrollando me ha surgido un problema al que nunca me había enfrentado, ya que al usar la función array_merge_recursive para unir arrays, no se lleva bien cuando las claves son valores int, ya que el método las ignora totalmente.
La necesidad que me surge es unir arrays con claves idénticas para luego aplanarlos uniendo los valores que son idénticos.Todos los días se generan unos report y al realizar unos filtros quiero unir los valores de esos report para realizar un informe agregado de la información diariamente, semanalmente, quincenal o mensualmente. En mi caso de uso los valores de las claves son códigos HTTP, por los que los trato como valores enteros y he tenido que aplicar un pequeño truco.
Por ejemplo teniendo dos arrays como los siguientes:
$a = array( 200 => array("url1","url2"), 300 => array("url3") ); $b = array( 200 => array("url4", "url5"), 300 => array("url6") );
Mi objetivo sería conseguir otro array con la siguiente estructura, para después aplanarlos con otra función.
$c = array( 200 => array( 0 =>array("url1","url2"), 1 => array("url4", "url5") 300 => array( 0 => array("url3"), 1 => array("url6") );
Para finalmente conseguir el siguiente resultado, que es el objetivo de mi caso de uso.
$result = array( 200 => array("url1","url2", "url4","url5"), 300 => array("url3","url6") );
Solución al problema
Básicamente la solución que he encontrado indagando en el gran StackOverFlow es añadir un prefijo y eliminarlo el prefijo antes de realizar la operación con la función array_merge_recursive, convirtiendo las claves en strings y volviendo a transformar a enteros. Os comparto el GIST con las funciones necesarias para aplicar esta operación
Espero que os resulte útil, Es un truquito facil, sencillo y para toda la familia 🙂