Pousser l'élément vers un tableau associatif en PHP

92

J'ai essayé de pousser un élément vers un tableau associatif comme celui-ci:

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

Cependant, au lieu de «nom» comme clé, ajoute un nombre. Y a-t-il une autre façon de le faire?

Ryudice
la source
Il n'est pas possible de pousser une baie dans une autre baie. J'ai essayé toutes ces options et la fusion vient d'ajouter le tableau. J'ai résolu mon problème avec une classe.
Alex Benincasa Santos

Réponses:

131
$options['inputs']['name'] = $new_input['name'];
webbiedave
la source
62

Au lieu de array_push () , utilisez array_merge ()

Il fusionnera deux tableaux et combinera leurs éléments dans un seul tableau.

Exemple de code -

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

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

Il renvoie le tableau résultant dans le final_array. Et les résultats du tableau résultant seront -

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

Veuillez consulter ce lien pour être conscient des problèmes éventuels.

Murtaza Khursheed Hussain
la source
1
en fait, il devrait être $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ tableau_existant, $ nouveau tableau);
Calvin Chan
1
et bien c'est un bon sens de collecter la sortie. J'étais juste en train de donner l'idée. Regards
Murtaza Khursheed Hussain
17

C'est une fonction cool

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

Juste utiliser

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

Crédits et explication

Ajmal Salim
la source
7

La solution de WebbieDave fonctionnera. Si vous ne voulez pas écraser quoi que ce soit qui pourrait déjà être dans 'nom', vous pouvez également faire quelque chose comme ceci:

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

Curtis
la source
Cela ne fonctionne pas si vous ne voulez pas que tout reste associatif, par exemple sans pousser d'autres tableaux numérotés entre les deux. Jetez un œil à @Steven H ci
brianlmerritt
4

If $new_inputpeut contenir plus qu'un simple élément «name» que vous voudrez peut-être utiliser 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
la source
3

La réponse de Curtis était très proche de ce dont j'avais besoin, mais je l'ai un peu modifiée.

Où il a utilisé:

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

J'ai utilisé:

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

Voici mon code réel utilisant une requête d'une base de données:

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

Merci!

Steven H
la source
3

j'utilise php5.6

code :

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

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

print_r($person) 

production

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )
ebnibrahem
la source
2

Changez simplement quelques extraits (utilisez la fonction array_merge): -

  $options['inputs']=array_merge($options['inputs'], $new_input);
vigne
la source
1
$new_input = array('type' => 'text', 'label' => 'First name', 'show' => true, 'required' => true);
$options['inputs']['name'] = $new_input;
Ryan Kinal
la source
1

Il existe une meilleure façon de procéder:

Si le tableau $ arr_options contient le tableau existant.

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

$arr_options += $arr_new_input;

Attention: $ arr_options doit exister. si $ arr_options a déjà un ['nom'] il sera écrasé.

J'espère que cela t'aides.

Henri
la source
0

Tu peux essayer.

$options['inputs'] = $options['inputs'] + $new_input;
Adnan Ahmad
la source
0

Vous pouvez utiliser array_merge ($ array1, $ array2) pour fusionner le tableau associatif. Exemple:

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

Production:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Mamun Sabuj
la source