Hinzufügen eines Elements zu einem assoziativen Array

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

}

Dies funktioniert nicht, da es den Wert von Daten ersetzt. Wie kann ich dafür sorgen, dass jeder Schleife ein assoziativer Wert hinzugefügt wird? $file_dataist ein Array von Daten mit einer dynamischen Größe.

Phil
quelle

Antworten:

92

Ich denke du willst $data[$category] = $question;

Oder falls Sie ein Array möchten, das Kategorien einem Array von Fragen zuordnet:

$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);
DiebMaster
quelle
9
Andere Programmierer werden Sie jedoch für Tippfehler hassen, da sie gezwungen sein werden, diese ebenfalls auszuführen oder zu beheben.
ThiefMaster
Ich habe mich mit array_push zu wohl gefühlt und die Grundlagen vergessen! Wirklich hilfreich!
CLOUGH
115

Sie können dies einfach tun

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

Wenn Sie auf PHP 5.4+ laufen

$data += [$category => $question];
Mohyaddin Alaoddin
quelle
20
Was in aller Welt?
Phil
9
Dies ist die richtige Antwort auf das Hinzufügen von Elementen zu einem assoziativen Array.
andreszs
7
Fügen Sie auch mehrere Elemente hinzu: $ data + = ['x' => 1, 'y' => 2];
split19
Dies ist der Weg, wenn Sie nicht mehr als ein Objekt im Array haben
möchten
Hinweis: Dies kann funktionieren, wenn Ihr Array noch kein Element mit demselben Schlüssel hat und daher ein vorhandenes Element nicht überschreiben kann.
Mohamad Hamouday
29

vorher für Schleife:

$data = array();

dann in deiner Schleife:

$data[] = array($catagory => $question);
moe
quelle
2
Wenn Sie dies auf diese Weise tun, vergessen Sie nicht, das Array zuerst mit $ data = array () zu initiieren. oder PHP wird eine Nachricht werfen
Alex Bailey
Ich denke, SO speichert meine Antwort im Cache, so wie ich sie gepostet habe, wurde mir klar, dass ich nicht gesehen habe, dass sie in seinem Code initialisiert wurde. Also habe ich es hinzugefügt und ich habe deinen Kommentar danach gesehen, danke :-)
moe
4
Dies hat nicht funktioniert, da ein Array innerhalb des Arrays erstellt wurde. Entschuldigung, wenn meine Frage irgendwie durch dich geht.
Phil
PHP 5.4+ können Sie etwas weniger Code schreiben:$data=[]; $data[] = [$category => $question];
Justin
$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];schlägt mit undefiniertem Index fehl : foo in .. , aber unten vorgeschlagenes Pluszeichen funktioniert.
qrtLs
5

Für alle, die ebenfalls ein assoziatives 2d-Array hinzufügen müssen, können Sie auch die oben angegebene Antwort verwenden und den Code wie folgt verwenden

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

Sie können es dann aufrufen (um das Ergebnis zu testen, indem Sie:

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

welches $ Frage drucken sollte

Maximran
quelle
5

Ich weiß, dass dies eine alte Frage ist, aber Sie können verwenden:

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

Dies wird arraydas Ende Ihrer Strömung erreichen array. Oder wenn Sie nur versuchen, einzelne Werte am Ende Ihres Arrays hinzuzufügen, nicht mehr Arrays, können Sie Folgendes verwenden:

array_push($data,$question);
Mike
quelle