Aggiunta di un elemento a un array associativo


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

}

Questo non funziona in quanto sostituisce il valore dei dati. Come posso fare in modo che aggiunga un valore associativo a ogni ciclo? $file_dataè un array di dati che ha una dimensione dinamica.

Risposte:


98

Penso che tu voglia $data[$category] = $question;

O nel caso in cui desideri un array che associ le categorie a un array di domande:

$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
Altri programmatori ti odieranno per gli errori di battitura, poiché saranno costretti a eseguirli anche loro o risolverli.
ThiefMaster

Ero troppo a mio agio con array_push, ho dimenticato le basi! Davvero utile!
CLOUGH

122

Puoi semplicemente farlo

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

Se stai utilizzando php 5.4+

$data += [$category => $question];

9
Questa è la risposta corretta per aggiungere elementi a un array associativo.
andreszs

7
Aggiungi anche più elementi: $ data + = ['x' => 1, 'y' => 2];
split19

questo è il modo se non vuoi finire con più di un oggetto all'interno dell'array
DragonFire

Nota: questo può funzionare se il tuo array non ha già un elemento con la stessa chiave, quindi non può sovrascrivere un elemento esistente.
Mohamad Hamouday

29

prima per ciclo:

$data = array();

poi nel tuo ciclo:

$data[] = array($catagory => $question);

2
Se lo fai in questo modo, non dimenticare di inizializzare prima l'array usando $ data = array (); oppure php lancerà un avviso
Alex Bailey

Penso che SO memorizzi nella cache la mia risposta, così come l'ho pubblicata mi sono reso conto che non lo vedevo inizializzato nel suo codice. Quindi l'ho aggiunto e ho visto il tuo commento dopo, grazie :-)
moe

4
Questo non ha funzionato perché ha creato un array all'interno dell'array. Scusa se la mia domanda ti ha fatto passare.
Phil

PHP 5.4+ puoi scrivere un po 'meno codice:$data=[]; $data[] = [$category => $question];
Justin

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];fallisce con un indice non definito: pippo in .. , ma il segno più suggerito di seguito funziona.
qrtLs

7

So che questa è una vecchia domanda ma puoi usare:

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

Questo spingerà arrayverso la fine della tua corrente array. O se stai solo cercando di aggiungere singoli valori alla fine del tuo array, non più array, puoi usare questo:

array_push($data,$question);

6

Per chiunque abbia anche bisogno di aggiungere in un array associativo 2d, puoi anche usare la risposta data sopra e usare il codice in questo modo

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

puoi quindi chiamarlo (per testare il risultato con:

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

che dovrebbe stampare $ question

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.