Dodanie elementu do tablicy asocjacyjnej

88
//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

To nie działa, ponieważ zastępuje wartość danych. Jak mogę jednak dodać wartość asocjacyjną do każdej pętli? $file_datato tablica danych o rozmiarze dynamicznym.

Phil
źródło

Odpowiedzi:

96

Myślę, że chcesz $data[$category] = $question;

Lub jeśli potrzebujesz tablicy, która odwzorowuje kategorie na tablicę pytań:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);
ThiefMaster
źródło
9
Inni programiści będą jednak nienawidzić cię za literówki, ponieważ będą zmuszeni je również zrobić lub naprawić.
ThiefMaster
Byłem zbyt wygodny z array_push, zapomniałem o podstawach! Naprawdę pomocny!
CLOUGH
121

Możesz to po prostu zrobić

$data += array($category => $question);

Jeśli korzystasz z php 5.4+

$data += [$category => $question];
Mohyaddin Alaoddin
źródło
21
co na świecie?
Phil,
9
To jest poprawna odpowiedź na dodawanie elementów do tablicy asocjacyjnej.
andreszs
7
Dodaj też wiele elementów: $ data + = ['x' => 1, 'y' => 2];
split19
tak jest, jeśli nie chcesz mieć więcej niż jednego obiektu wewnątrz tablicy
DragonFire
Uwaga: może to zadziałać, jeśli tablica nie zawiera już elementu z tym samym kluczem, więc nie może zastąpić istniejącego elementu.
Mohamad Hamouday
29

before for loop:

$data = array();

następnie w swojej pętli:

$data[] = array($catagory => $question);
moe
źródło
2
Jeśli zrobisz to w ten sposób, nie zapomnij najpierw zainicjować tablicy za pomocą $ data = array (); inaczej php wyśle ​​powiadomienie
Alex Bailey
Myślę, że SO zapisuje moją odpowiedź w pamięci podręcznej, ponieważ gdy ją opublikowałem, zdałem sobie sprawę, że nie widziałem jej inicjalizacji w jego kodzie. Dodałem więc go i zobaczyłem później twój komentarz, dziękuję :-)
moe
4
To nie zadziałało, ponieważ utworzyło tablicę wewnątrz tablicy. Przepraszam, jeśli moje pytanie trochę cię wyłączyło.
Phil
PHP 5.4+ możesz napisać trochę mniej kodu:$data=[]; $data[] = [$category => $question];
Justin
$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];kończy się niepowodzeniem z Undefined index: foo in .. , ale poniżej sugerowany znak plus działa.
qrtLs
7

Wiem, że to stare pytanie, ale możesz użyć:

array_push($data, array($category => $question));

To popchnie arrayna koniec twojego prądu array. Lub jeśli próbujesz tylko dodać pojedyncze wartości na końcu swojej tablicy, a nie więcej tablic, możesz użyć tego:

array_push($data,$question);
Mikrofon
źródło
6

Dla każdego, kto również musi dodać do tablicy asocjacyjnej 2d, możesz również użyć odpowiedzi podanej powyżej i użyć takiego kodu

 $data[$category]["test"] = $question

możesz to wywołać (aby przetestować wynik przez:

echo $data[$category]["test"];

co powinno wypisać $ question

maximran
źródło