105

I've been trying to push an item to an associative array like this:

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

However, instead of 'name' as the key in adds a number. Is there another way to do it?

Crisoforo Gaspar
  • 3,642
  • 2
  • 19
  • 27
ryudice
  • 35,196
  • 32
  • 106
  • 157

12 Answers12

148
$options['inputs']['name'] = $new_input['name'];
webbiedave
  • 47,388
  • 8
  • 87
  • 99
70

Instead of array_push(), use array_merge()

It will merge two arrays and combine their items in a single array.

Example Code -

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

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

Its returns the resulting array in the final_array. And results of resulting array will be -

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

Please review this link, to be aware of possible problems.

Heemanshu Bhalla
  • 3,372
  • 1
  • 25
  • 47
Murtaza Khursheed Hussain
  • 14,976
  • 7
  • 55
  • 82
22

This is a cool function

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

Just use

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

Credits & Explanation

Ajmal Salim
  • 3,913
  • 2
  • 31
  • 39
7

WebbieDave's solution will work. If you don't want to overwrite anything that might already be at 'name', you can also do something like this:

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

Curtis
  • 3,832
  • 1
  • 17
  • 26
  • This doesn't work if you don't want to keep everything associative, e.g. without pushing other numbered arrays in between. Have a look at @Steven H below – brianlmerritt Aug 31 '17 at 09:25
5

If $new_input may contain more than just a 'name' element you may want to use 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
  • 7,748
  • 2
  • 32
  • 49
5

i use php5.6

code:

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

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

print_r($person) 

output

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )
Feras Al Sous
  • 1,033
  • 1
  • 12
  • 23
ebnibrahem
  • 69
  • 1
  • 4
3

Curtis's answer was very close to what I needed, but I changed it up a little.

Where he used:

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

I used:

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

Here's my actual code using a query from a DB:

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

Thanks!

bool.dev
  • 17,262
  • 5
  • 65
  • 92
Steven H
  • 337
  • 2
  • 9
2

Just change few snippet(use array_merge function):-

  $options['inputs']=array_merge($options['inputs'], $new_input);
vineet
  • 12,735
  • 10
  • 52
  • 73
1
$new_input = array('type' => 'text', 'label' => 'First name', 'show' => true, 'required' => true);
$options['inputs']['name'] = $new_input;
Ryan Kinal
  • 16,884
  • 4
  • 43
  • 63
1

There is a better way to do this:

If the array $arr_options contains the existing array.

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

$arr_options += $arr_new_input;

Warning: $arr_options must exist. if $arr_options already has a ['name'] it wil be overwritten.

Hope this helps.

Henry
  • 1,083
  • 1
  • 9
  • 10
0

You can try.

$options['inputs'] = $options['inputs'] + $new_input;
Adnan Ahmad
  • 774
  • 1
  • 10
  • 12
-1

You can use array_merge($array1, $array2) to merge the associative array. Example:

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

Output:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Mamun Sabuj
  • 159
  • 1
  • 2
  • 6