2010-07-08 20 views
63

he estado tratando de empujar un elemento a una matriz asociativa como esto:Push to matriz asociativa en PHP

$new_input['name'] = array(
    'type' => 'text', 
    'label' => 'First name', 
    'show' => true, 
    'required' => true 
); 
array_push($options['inputs'], $new_input); 

Sin embargo, en lugar de 'nombre' como la clave en añade un número. ¿Hay alguna otra forma de hacerlo?

+0

No es posible insertar una matriz en otra matriz. He intentado todas estas opciones y la fusión acaba de agregar la matriz. Resolví mi problema con una clase. –

Respuesta

80
$options['inputs']['name'] = $new_input['name']; 
+3

ayuda de alguna manera +1 –

1
$new_input = array('type' => 'text', 'label' => 'First name', 'show' => true, 'required' => true); 
$options['inputs']['name'] = $new_input; 
6

solución de WebbieDave funcionará. Si no desea sobrescribir cualquier cosa que pueda estar ya en el 'nombre', también se puede hacer algo como esto:

$options['inputs']['name'][] = $new_input['name'];

+0

Esto no funciona si no desea mantener todo lo asociativo, p. sin empujar otras matrices numeradas en el medio. Eche un vistazo a @Steven H debajo de – brianlmerritt

3

Si $new_input puede contener más que un elemento de 'nombre' es posible que desee para usar array_merge.

$new_input = array('name'=>array(), 'details'=>array()); 
$new_input['name'] = array('type'=>'text', 'label'=>'First name'...); 
$options['inputs'] = array_merge($options['inputs'], $new_input); 
44

En lugar de array_push(), utilice array_merge()

$existing_array = array('a'=>'b', 'b'=>'c'); 
$new_array = array('d'=>'e', 'f'=>'g'); 

array_merge($existing_array, $new_array); 

Su devuelve la matriz resultante anexar en la matriz inicial en este caso $existing_array.

Y matriz resultante será

array('a'=>'b', 'b'=>'c','d'=>'e', 'f'=>'g') 

por favor revise este link, estar al tanto de posibles problemas.

+0

en realidad debería ser $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ existing_array, $ new_array); –

+1

, así que es un sentido común para recopilar resultados. Solo estaba dando la idea. Saludos –

3

La respuesta de Curtis fue muy similar a lo que necesitaba, pero lo cambié un poco.

donde solía:

$options['inputs']['name'][] = $new_input['name']; 

que utiliza:

$options[]['inputs']['name'] = $new_input['name']; 

Aquí está mi código real utilizando una consulta de una base de datos:

while($row=mysql_fetch_array($result)){ 
    $dtlg_array[]['dt'] = $row['dt']; 
    $dtlg_array[]['lat'] = $row['lat']; 
    $dtlg_array[]['lng'] = $row['lng']; 
} 

Gracias!

7

Ésta es una función de enfriamiento

function array_push_assoc($array, $key, $value){ 
$array[$key] = $value; 
return $array; 
} 

sólo tiene que utilizar

$myarray = array_push_assoc($myarray, 'h', 'hello'); 

Credits & Explanation

2

acaba de cambiar algunas fragmento (utilizar array_merge función): -

$options['inputs']=array_merge($options['inputs'], $new_input); 
0

Puede tratar.

$options['inputs'] = $options['inputs'] + $new_input; 
Cuestiones relacionadas