Пересунути елемент до асоціативного масиву в PHP


92

Я намагався перенести елемент в асоціативний масив, як це:

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

Однак замість "name" в якості ключа додається число. Чи є інший спосіб це зробити?


Переміщення масиву в інший масив неможливе. Я спробував усі ці параметри, і злиття просто додало масив. Я вирішив свою проблему з класом.
Алекс Бенінкаса Сантос,

Відповіді:



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);

Він повертає отриманий масив у кінцевому_масиві. І результати результуючого масиву будуть -

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

Будь ласка, перегляньте це посилання , щоб бути в курсі можливих проблем.


1
насправді це має бути $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ існуючий_масив, $ новий_масив);
Calvin Chan

1
ну це здоровий глузд збирати результати. Я просто давав ідею. З повагою
Муртаза Хуршід Хуссейн


7

Рішення WebbieDave буде працювати. Якщо ви не хочете перезаписувати нічого, що могло б уже бути під ім'ям, ви можете зробити щось подібне:

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


Це не працює, якщо ви не хочете зберігати все асоціативно, наприклад, не просуваючи між собою інші пронумеровані масиви. Погляньте на @Steven H нижче
brianlmerritt

4

Якщо $new_inputможе містити більше, ніж просто елемент "name", який ви можете використовувати 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

Є кращий спосіб зробити це:

Якщо масив $ 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

Ви можете використовувати 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 )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.