Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/10/2014, 10:55
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 10 meses
Puntos: 320
Respuesta: Como insertar un array dentro de un array?

El orden no esta dado por la clave sino por la secuencia de inserción, por ejemplo:
Código PHP:
Ver original
  1. <?php
  2.     $a = [11 => "Ele 11", 5 => "Ele 5", 0 => "Ele 0", 22 => "Ele 22"];

El orden es 11, 5, 0, 22. Si bien el indice es numérico, el orden es el de inserción prevalece sobre el de las claves.

Por lo tanto lo que necesitas en construir un nuevo array en base a los dos que tienes:

Código PHP:
Ver original
  1. <?php
  2.     $a = array("fruta", "verdura", "nombres");
  3.     $b = array("lechuga","apio","zapallo");
  4.     $clave = "verdura";
  5.    
  6.     $keys = array_keys($a);
  7.     $vals = array_values($a);
  8.    
  9.     $pos = array_search($clave, $vals);
  10.     $keys[$pos] = $clave;
  11.     $vals[$pos] = $b;
  12.    
  13.     $combine = array_combine($keys, $vals);
  14.    
  15.     var_dump($combine);

Cita:
array (size=3)
0 => string 'fruta' (length=5)
'verdura' =>
array (size=3)
0 => string 'lechuga' (length=7)
1 => string 'apio' (length=4)
2 => string 'zapallo' (length=7)
2 => string 'nombres' (length=7)
Ahora bien, esto se podria mejorar, sino cada vez que tengas un array tendrias que definir un moton de variables, seria mejor algo asi:
Código PHP:
Ver original
  1. $a = ["fruta", "verdura", "nombres"];
  2.     $b = [  
  3.             "verdura" => ["lechuga", "apio", "zapallo"],
  4.             "nombres" => ["jose", "gaston", "matias"]
  5.          ];
  6.    
  7.     $keys = array_keys($a);
  8.     $vals = array_values($a);
  9.    
  10.     foreach($b as $clave => $val)
  11.     {
  12.         $pos = array_search($clave, $vals);
  13.         $keys[$pos] = $clave;
  14.         $vals[$pos] = $val;    
  15.     }
  16.    
  17.     $combine = array_combine($keys, $vals);
  18.    
  19.     var_dump($combine);

Cita:
array (size=3)
0 => string 'fruta' (length=5)
'verdura' =>
array (size=3)
0 => string 'lechuga' (length=7)
1 => string 'apio' (length=4)
2 => string 'zapallo' (length=7)
'nombres' =>
array (size=3)
0 => string 'jose' (length=4)
1 => string 'gaston' (length=6)
2 => string 'matias' (length=6)
Lo cual ya esta bastante mejor, pero ¿Que pasaria si la clave no existe? Se reemplazaria el primer elemento, eso no esta bien, asi que hay que validar:
Código PHP:
Ver original
  1. $a = ["fruta", "verdura", "nombres"];
  2.     $b = [
  3.             "verdura" => ["lechuga", "apio", "zapallo"],
  4.             "nombres" => ["jose", "gaston", "matias"],
  5.             "provincias" => ["buenos aires", "neuquen", "cordoba"]
  6.          ];
  7.  
  8.     $keys = array_keys($a);
  9.     $vals = array_values($a);
  10.  
  11.     foreach($b as $clave => $val)
  12.     {
  13.         if(($pos = array_search($clave, $vals)) !== false)
  14.         {
  15.             $keys[$pos] = $clave;
  16.             $vals[$pos] = $val;
  17.         }
  18.     }
  19.  
  20.     $combine = array_combine($keys, $vals);
  21.  
  22.     var_dump($combine);

Cita:
array (size=3)
0 => string 'fruta' (length=5)
'verdura' =>
array (size=3)
0 => string 'lechuga' (length=7)
1 => string 'apio' (length=4)
2 => string 'zapallo' (length=7)
'nombres' =>
array (size=3)
0 => string 'jose' (length=4)
1 => string 'gaston' (length=6)
2 => string 'matias' (length=6)
Ok ya casi estamos, esto convendria tenerlo en una funcion, asi que:
Código PHP:
Ver original
  1. function array_value_key_replace($array, $values)
  2.     {        
  3.         $keys = array_keys($array);
  4.         $vals = array_values($array);
  5.    
  6.         foreach($values as $key => $val)
  7.         {
  8.             if(($pos = array_search($key, $vals)) !== false)
  9.             {
  10.                 $keys[$pos] = $key;
  11.                 $vals[$pos] = $val;
  12.             }
  13.         }
  14.    
  15.         $array = array_combine($keys, $vals);
  16.        
  17.         return $array;
  18.     }
  19.    
  20.     $a = ["fruta", "verdura", "nombres"];
  21.     $b = [
  22.             "verdura" => ["lechuga", "apio", "zapallo"],
  23.             "nombres" => ["jose", "gaston", "matias"]
  24.          ];
  25.  
  26.     var_dump(array_value_key_replace($a, $b));

Pero de esta forma no es del todo funcional, podria mejorarse pasando el primer parametro como referencia:
Código PHP:
Ver original
  1. <?php
  2. function array_value_key_replace(&$array, $values)

Ahora si, podria estar aceptable
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 20/10/2014 a las 11:17