Wypchnij element do tablicy asocjacyjnej w PHP


92

Próbowałem przekazać element do tablicy asocjacyjnej, takiej jak ta:

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

Jednak zamiast „name” jako klucz dodaje numer. Czy jest inny sposób, aby to zrobić?


Nie jest możliwe przeniesienie tablicy do innej tablicy. Wypróbowałem wszystkie te opcje, a scalenie właśnie dodało tablicę. Rozwiązałem swój problem z klasą.
Alex Benincasa Santos

Odpowiedzi:



62

Zamiast array_push () użyj array_merge ()

Połączy dwie tablice i połączy ich elementy w jedną tablicę.

Przykładowy kod -

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

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

Zwraca wynikową tablicę w final_array. A wynikowa tablica będzie następować -

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

Przejrzyj ten link , aby mieć świadomość możliwych problemów.


1
właściwie powinno to być $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ wynik = tablica_merge ($ istniejąca_ tablica, $ nowa_ tablica);
Calvin Chan

1
cóż, zbieranie wyników jest zdrowy rozsądek. Właśnie podsuwałem pomysł. Pozdrawiam
Murtaza Khursheed Hussain

17

To fajna funkcja

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

Po prostu użyj

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

Kredyty i wyjaśnienie


7

Rozwiązanie WebbieDave zadziała. Jeśli nie chcesz nadpisywać niczego, co może już znajdować się w polu „nazwa”, możesz też zrobić coś takiego:

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


To nie działa, jeśli nie chcesz, aby wszystko było asocjacyjne, np. Bez umieszczania między nimi innych tablic numerowanych. Spójrz na @Steven H poniżej
brianlmerritt

4

Jeśli $new_inputmoże zawierać więcej niż tylko element „nazwa”, którego możesz chcieć użyć 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

Odpowiedź Curtisa była bardzo bliska temu, czego potrzebowałem, ale trochę ją zmieniłem.

Gdzie używał:

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

Użyłem:

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

Oto mój rzeczywisty kod wykorzystujący zapytanie z bazy danych:

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

Dzięki!


3

używam php5.6

kod :

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

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

print_r($person) 

wynik

Array( ["name"=>"mohammed", "age"=>30, "addr"=>"Sudan"] )

2

Po prostu zmień kilka fragmentów (użyj funkcji 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

Jest na to lepszy sposób:

Jeśli tablica $ arr_options zawiera istniejącą tablicę.

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

$arr_options += $arr_new_input;

Ostrzeżenie: $ arr_options musi istnieć. jeśli $ arr_options ma już ['name'], zostanie nadpisane.

Mam nadzieję że to pomoże.



0

Możesz użyć array_merge ($ tablica1, $ tablica2), aby scalić tablicę asocjacyjną. Przykład:

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

Wynik:

Array ( [0] => red [1] => green [2] => blue [3] => yellow )
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.