Foros del Web » Programando para Internet » PHP »

Como insertar un array dentro de un array?

Estas en el tema de Como insertar un array dentro de un array? en el foro de PHP en Foros del Web. Como puedo hacer para insertar un array, dentro de un array ya creado, y que se inserte de acuerdo a un valor especifico. Por ejemplo ...
  #1 (permalink)  
Antiguo 19/10/2014, 16:14
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 3
Pregunta Como insertar un array dentro de un array?

Como puedo hacer para insertar un array, dentro de un array ya creado, y que se inserte de acuerdo a un valor especifico. Por ejemplo

Si tengo

Código PHP:
$a = array("fruta""verdura","nombres");
$b = array("lechuga","apio","zapallo"); 
Lo que quiero lograr, es que el valor verdura se transforme en un indice y como valor insertarle ese array $b, .
que el resultado sea

Código PHP:
$c=    array(
        
"fruta",
        
"verdura" => array("lechuga","apio","zapallo"),
        
"nombres"
    
); 
  #2 (permalink)  
Antiguo 19/10/2014, 16:53
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: Como insertar un array dentro de un array?

Me imagino que por algún motivo no podés declarar directamente los valores dentro de los índices. Entonces podés usar array_push():

Código PHP:
<?php
    $a 
= array("fruta" => array(), "verdura" => array(), "nombres" => array()); 
    
array_push($a["fruta"], "manzana""arándano");
?>
  #3 (permalink)  
Antiguo 19/10/2014, 18:07
 
Fecha de Ingreso: octubre-2006
Mensajes: 227
Antigüedad: 17 años, 5 meses
Puntos: 3
Respuesta: Como insertar un array dentro de un array?

Cita:
Iniciado por GeekGirl Ver Mensaje
Me imagino que por algún motivo no podés declarar directamente los valores dentro de los índices. Entonces podés usar array_push():

Código PHP:
<?php
    $a 
= array("fruta" => array(), "verdura" => array(), "nombres" => array()); 
    
array_push($a["fruta"], "manzana""arándano");
?>

Gracias por la ayuda pero la idea es, no tocar el array $a, ni valores ni indices (los obtengo dinamicamente desde una base de datos), es decir, necesito que pueda ser cambiado en tiempo de ejecucion.

A lo mas que llegue es a esto:

Código PHP:
function cambiarClave(&$data)
{
    
$b = array("lechuga","apio","zapallo");
    foreach (
$data as $key => $value)
    {
        
$nuevaClave "verdura"

        if (
$nuevaClave == $value)
        {
            unset(
$data[$key]);
            
$data[$nuevaClave] = $b;
        }

        if (
is_array($value))
        {
            
cambiarClave($data[$key]);
        }
    }
}

$prueba = array("fruta""verdura","nombres");
cambiarClave($prueba);

echo 
"<pre>";
print_r($prueba);
echo 
"</pre>"
La salida es

Código HTML:
Array
(
    [0] => fruta
    [2] => nombres
    [verdura] => Array
        (
            [0] => lechuga
            [1] => apio
            [2] => zapallo
        )

)
El problema es que verdura tendria que ocupar la segunda posicion y no la tercera.
  #4 (permalink)  
Antiguo 20/10/2014, 06:14
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: Como insertar un array dentro de un array?

El problema es que como lo planteas, fruta y nombres siguen siendo string dentro de un array numérico, y verdura es una posición definida por un índice asociativo. Es una mezcla un poco extraña.

Si lo que querés es mantener la posición dentro del array númerico y que a su vez se cree dentro de esta un índice asociativo, deberías cambiar tu código a:

Código PHP:
<?php
        
if ($nuevaClave == $value)
        {
            
$data[$key][$nuevaClave] = $b;
        }
?>
  #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: 11 años, 11 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

Etiquetas: Ninguno
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 23:11.