2010-07-08 19 views
63

Próbowałem naciskać element do tablicy asocjacyjnej tak:Prześlij na tablicy asocjacyjnej w PHP

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

Jednak zamiast „nazwa” jako klucz w dodaje numer. Czy jest inny sposób na zrobienie tego?

+0

Nie można wepchnąć 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ą. –

Odpowiedz

80
$options['inputs']['name'] = $new_input['name']; 
+3

pomaga niektórym, jak +1 –

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

rozwiązanie WebbieDave będzie działać. Jeśli nie chcesz zastąpić coś, co może być już w „imię”, można też zrobić coś takiego:

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

+0

To nie działa, jeśli nie chcesz, aby wszystko było skojarzone, np. bez pchania kolejnych ponumerowanych tablic pośrednich. Spójrz na @Steven H poniżej – brianlmerritt

3

jeśli $new_input może zawierać więcej niż tylko nazwanej elementu może chcesz używać 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); 
44

Zamiast array_push() użyć array_merge()

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

array_merge($existing_array, $new_array); 

dochody z uzyskaną macierz dodać w pierwszej tablicy w tym przypadku $existing_array.

i wynikającej tablica będzie

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

Proszę recenzję link, aby zdawać sobie sprawę z ewentualnych problemów.

+0

faktycznie powinno to być $ existing_array = array ('a' => 'b', 'b' => 'c'); $ new_array = array ('d' => 'e', ​​'f' => 'g'); $ result = array_merge ($ existing_array, $ new_array); –

+1

Dobrze jest zbierać dane wyjściowe. Po prostu podsuwałem ten pomysł. pozdrowienia –

3

Odpowiedź Curtisa była bardzo zbliżona do tego, czego potrzebowałem, ale zmieniłem ją trochę.

Gdzie on używany:

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

użyłem:

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

Oto mój rzeczywisty kod przy użyciu kwerendy z DB:

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

Dzięki!

7

To jest fajna funkcja

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

Wystarczy użyć

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

Credits & Explanation

2

Wystarczy zmienić kilka fragment (użyj array_merge funkcji): -

$options['inputs']=array_merge($options['inputs'], $new_input); 
0

Można próbować.

$options['inputs'] = $options['inputs'] + $new_input; 
Powiązane problemy