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?

Ryudice
fuente
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:

131
$options['inputs']['name'] = $new_input['name'];
webbiedave
fuente
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.

Murtaza Khursheed Hussain
fuente
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

Ajmal Salim
fuente
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'];

Curtis
fuente
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);
thetaiko
fuente
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!

Steven H
fuente
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"] )
ebnibrahem
fuente
2

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

  $options['inputs']=array_merge($options['inputs'], $new_input);
vineet
fuente
1
$new_input = array('type' => 'text', 'label' => 'First name', 'show' => true, 'required' => true);
$options['inputs']['name'] = $new_input;
Ryan Kinal
fuente
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.

Enrique
fuente
0

Puedes probar.

$options['inputs'] = $options['inputs'] + $new_input;
Adnan Ahmad
fuente
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 )
Mamun Sabuj
fuente