Empuje el elemento a una matriz asociativa en PHP


92

He intentado enviar un elemento a una matriz asociativa como esta:

$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 clave, agrega un número. ¿Existe otra forma de hacerlo?


No es posible insertar una matriz en otra matriz. Probé todas estas opciones y la combinación acaba de agregar la matriz. Resolví mi problema con una clase.
Alex Benincasa Santos

Respuestas:



62

En lugar de array_push () , usa array_merge ()

Fusionará dos matrices y combinará sus elementos en una sola matriz.

Código de ejemplo -

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

$final_array=array_merge($existing_array, $new_array);

Devuelve la matriz resultante en la matriz_final. Y los resultados de la matriz resultante serán:

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

Revise este enlace para estar al tanto de posibles problemas.


1
en realidad debería ser $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ resultado = fusión_matriz ($ matriz_existente, $ matriz_ nueva);
Calvin Chan

1
bueno, es de sentido común recopilar resultados. Solo estaba dando la idea. Saludos
Murtaza Khursheed Hussain

17

Esta es una función genial

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

Solo usa

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

Créditos y explicación


7

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

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


Esto no funciona si no desea mantener todo asociativo, por ejemplo, sin colocar otras matrices numeradas en el medio. Eche un vistazo a @Steven H a continuación
brianlmerritt

4

Si $new_inputpuede contener más que un elemento de 'nombre' que puede querer 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);

3

La respuesta de Curtis estuvo muy cerca de lo que necesitaba, pero la cambié un poco.

Donde usó:

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

Solía:

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

Aquí está mi código real usando 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!


3

yo suelo php5.6

codigo :

$person = ["name"=>"mohammed", "age"=>30];

$person['addr'] = "Sudan";

print_r($person) 

salida

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )

2

Simplemente cambie algunos fragmentos (use la función array_merge): -

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

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

1

Hay una mejor manera de hacer esto:

Si la matriz $ arr_options contiene la matriz existente.

$arr_new_input['name'] = [
    'type' => 'text', 
    'label' => 'First name', 
    'show' => true, 
    'required' => true
];

$arr_options += $arr_new_input;

Advertencia: $ arr_options debe existir. si $ arr_options ya tiene un ['nombre'], se sobrescribirá.

Espero que esto ayude.


0

Puedes probar.

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

0

Puede usar array_merge ($ array1, $ array2) para fusionar la matriz asociativa. Ejemplo:

$a1=array("red","green");
$a2=array("blue","yellow");
print_r(array_merge($a1,$a2));

Salida:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.