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.

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

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

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

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

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

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.