Foros del Web » Programando para Internet » PHP »

Como unir arrays bidimensionales asociativos

Estas en el tema de Como unir arrays bidimensionales asociativos en el foro de PHP en Foros del Web. Hola a todos! Les traigo algo que me tiene loco! El caso es que tengo estos dos arrays bidimensionales asociativos: Array1= ( Array ( "id_articulo" ...
  #1 (permalink)  
Antiguo 20/02/2012, 16:56
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 1 mes
Puntos: 7
Como unir arrays bidimensionales asociativos

Hola a todos!

Les traigo algo que me tiene loco!
El caso es que tengo estos dos arrays bidimensionales asociativos:

Array1= ( Array ( "id_articulo" => 5 , "id_sub" => 1 , "codigo" => 0100 ),
Array ( "id_articulo" => 1 , "id_sub" => 1 , "codigo" => 0036 ),
Array ( "id_articulo" => 30, "id_sub" => 1 "codigo" => 2036))

Array2= ( Array ( "id_articulo" => 30, "id_sub" => 1 "codigo" => 2036),
Array ( "id_articulo" => 7 , "id_sub" => 2 , "codigo" => 0135 ))


Resulta que quiero unirlos en un solo array del mismo tipo pero los dos tienen un array exactamente igual y no quiero que se repita.

Lo primero que intente fue el array_merge pero no pude, me dejaba un solo resultado.

Despues estuve buscando en internet, encontre algunos ejemplos con "array_unique" o "call_user_func_array" pero la verdad no consegui entender lo que estaba haciendo y tampoco consegui nada =S

Pero bueno, la pregunta es: ¿Puedo realizar la unión de estos dos arrays bidimensionales con alguna función de PHP, haciendo que deje un solo registro de los subarrays repetidos? o tengo que recurir a algo mas rebuscado para lograr esto?

Por lo menos una orientación de como conseguir esto!

Desde ya gracias!

Saludos!
  #2 (permalink)  
Antiguo 20/02/2012, 18:03
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como unir arrays bidimensionales asociativos

Creo que esta solución te puede servir:

Código PHP:
Ver original
  1. <?php
  2. $array1 = array(array("id_articulo" => 5, "id_sub" => 1, "codigo" => 0100),
  3. array("id_articulo" => 1, "id_sub" => 1, "codigo" => 0036),
  4. array("id_articulo" => 30, "id_sub" => 1, "codigo" => 2036));
  5.  
  6. $array2 = array(array("id_articulo" => 30, "id_sub" => 1, "codigo" => 2036),
  7. array("id_articulo" => 7, "id_sub" => 2, "codigo" => 0135));
  8.  
  9. $union = array_merge($array1, $array2);
  10.  
  11. $resultado = array_values(array_map("unserialize", array_unique(array_map("serialize", $union))));
  12.  
  13. echo '<pre>';
  14. print_r($resultado);
  15. echo '</pre>';

o así:

Código PHP:
Ver original
  1. <?php
  2. $array1 = array(array("id_articulo" => 5, "id_sub" => 1, "codigo" => 0100),
  3. array("id_articulo" => 1, "id_sub" => 1, "codigo" => 0036),
  4. array("id_articulo" => 30, "id_sub" => 1, "codigo" => 2036));
  5.  
  6. $array2 = array(array("id_articulo" => 30, "id_sub" => 1, "codigo" => 2036),
  7. array("id_articulo" => 7, "id_sub" => 2, "codigo" => 0135));
  8.  
  9. $union = array_merge($array1, $array2);
  10. $union = array_map('serialize', $union);
  11.  
  12. $data = array();
  13.  
  14. foreach (array_unique($union) as $v) {
  15.     $data[] = unserialize($v);
  16. }
  17.  
  18. echo '<pre>';
  19. print_r($data);
  20. echo '</pre>';

http://stackoverflow.com/questions/3...l-array-in-php

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 20/02/2012 a las 21:40
  #3 (permalink)  
Antiguo 20/02/2012, 21:23
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 1 mes
Puntos: 7
Respuesta: Como unir arrays bidimensionales asociativos

Otra vez muchas gracias andresdzphp!!

Tus soluciones están a otro nivel, como siempre funciona perfecto! pero cuando lo vi, no entendi nada de lo que estaba sucediendo. Y justamente no me gustaría solo aplicarlo y no entender lo que estoy haciendo. He estado intentando decifrar lo que has hecho.
Y aca va un resumen de lo que entendi y lo que no, me gustaria que si puedes me corrijas y me expliques lo que no entendi.

Yo utilize la primera de las dos opciones que me diste:

-Yo entiendo que primero unes los dos arrays con array_merge

-Despues le aplicas una especie de serial a todos los datos del array $union

-Y luego no entiendo, si yo le aplico array_unique directamente a $union me juntaria todos los subarrays en uno solo, pero como lo has hecho tu, despues de pasarlo a $union por el array_map "serialize" elimina solamente el subarray repetido ¿porque?

-Una vez que se consiguio eliminar el subarray repetido se hace el proceso inverso de deserialización con array_map "unserialize"

- Y por último array_values me parece que lo que hace es devolverle el numero de indexación correcta a los subarrays no? porque array_unique borra los subarrays repetidos pero no cambia el numero de orden digamos.

Debe ser una interpretación muy burda del proceso que ocurre en el código =) pero bueno, se hace lo que se puede jaja

Saludos!!
  #4 (permalink)  
Antiguo 20/02/2012, 21:29
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Como unir arrays bidimensionales asociativos

Si mas o menos eso es lo que hace...

1. Unimos todo con array_merge
2. usamos array_values para reordenar la numeración de los índices (ya que eliminamos uno y quedaría el salto).
3. Serializamos los arrays internos en cadenas
4. Teniendo estas cadenas sacamos las repetidas con array_unique
5. Volvemos a serializar para obtener el resultado final

A ver si así se entiende más:

Código PHP:
Ver original
  1. $union = array_merge($array1, $array2); //Unimos los 2 array
  2.  
  3. $resultado = array_values //indexamos el array externo para quitar los saltos
  4. (array_map("unserialize", //le decimos que tiene que aplicar la función unserialize
  5. array_unique( //a todos los elementos únicos de lo que resulte de
  6. array_map("serialize", $union) //aplicar serialize a la $union
  7. )));

PD: te coloqué un segundo ejemplo para que entiendas mejor el proceso, porque array_map te puede confundir.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 20/02/2012 a las 21:58
  #5 (permalink)  
Antiguo 15/04/2012, 13:06
 
Fecha de Ingreso: febrero-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
sumar dos arrays de dos dimensiones

Como puedo sumar dos arrays : ARRAY1 DE TABLA DE 4 FILAS Y 2 COLUMNAS 1 2 3 4 5 6 7 8 ARRAY2 DE TABLA DE 4 FILAS Y 2 COLUMNAS 7 5 4 6 3 2 5 7 LOS CUALES ME DEN UN ARRAY SUMADO COMO RESULTADO 8 7 7 10 8 8 12 15 Os estaré muy agradecido Larry

Etiquetas: arrays, bidimensionales, registro, asociativo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:27.