Перенести элемент в ассоциативный массив в PHP

92

Я пытался поместить элемент в ассоциативный массив следующим образом:

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

Однако вместо «имени» в качестве ключа добавляется число. Есть другой способ сделать это?

Рюдис
источник
Невозможно вставить массив в другой массив. Я пробовал все эти варианты, и слияние просто добавило массив. Я решил свою проблему с классом.
Alex Benincasa Santos

Ответы:

131
$options['inputs']['name'] = $new_input['name'];
Webbiedave
источник
62

Вместо array_push () используйте array_merge ()

Он объединит два массива и объединит их элементы в один массив.

Пример кода -

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

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

Он возвращает результирующий массив в final_array. И результаты результирующего массива будут -

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

Пожалуйста, просмотрите эту ссылку , чтобы быть в курсе возможных проблем.

Муртаза Хуршид Хусейн
источник
1
на самом деле это должно быть $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = массив ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ существующий_массив, $ новый_массив);
Calvin Chan
1
ну это здравый смысл собирать вывод. Я просто подал идею. С уважением
Муртаза Хуршид Хуссейн
17

Это классная функция

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

Просто используйте

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

Кредиты и объяснение

Аджмал Салим
источник
7

Решение WebbieDave будет работать. Если вы не хотите перезаписывать что-либо, что уже могло быть на имени, вы также можете сделать что-то вроде этого:

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

Кертис
источник
Это не сработает, если вы не хотите, чтобы все было ассоциативным, например, не помещая между ними другие пронумерованные массивы. Посмотрите на @Steven H ниже
brianlmerritt
4

Если $new_inputможет содержать больше, чем просто элемент «имя», который вы, возможно, захотите использовать 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

Ответ Кертиса был очень близок к тому, что мне было нужно, но я немного изменил его.

Где он использовал:

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

Я использовал:

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

Вот мой фактический код с использованием запроса из БД:

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

Благодарность!

Стивен Х
источник
3

я использую php5.6

код :

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

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

print_r($person) 

выход

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )
Эбнибрахем
источник
2

Просто измените несколько фрагментов (используйте функцию 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

Есть способ лучше:

Если массив $ arr_options содержит существующий массив.

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

$arr_options += $arr_new_input;

Предупреждение: $ arr_options должен существовать. если в $ arr_options уже есть ['name'], оно будет перезаписано.

Надеюсь это поможет.

Генри
источник
0

Можешь попробовать.

$options['inputs'] = $options['inputs'] + $new_input;
Аднан Ахмад
источник
0

Вы можете использовать array_merge ($ array1, $ array2) для объединения ассоциативного массива. Пример:

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

Выход:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Мамун Сабудж
источник