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.