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.

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

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

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

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


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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.