Ajouter un élément à un tableau associatif

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

}

Cela ne fonctionne pas car il remplace la valeur des données. Comment puis-je lui faire ajouter une valeur associative à chaque boucle? $file_dataest un tableau de données de taille dynamique.

Phil
la source

Réponses:

96

Je pense que tu veux $data[$category] = $question;

Ou au cas où vous voudriez un tableau qui mappe les catégories à un tableau de questions:

$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);
ThiefMaster
la source
9
D'autres programmeurs vous détesteront pour les fautes de frappe, car ils seront également obligés de les faire ou de les réparer.
ThiefMaster
J'étais trop à l'aise avec array_push, j'ai oublié les bases! Très utile!
CLOUGH
121

Vous pouvez simplement le faire

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

Si vous utilisez php 5.4+

$data += [$category => $question];
Mohyaddin Alaoddin
la source
21
quoi dans le monde?
Phil
9
C'est la bonne réponse pour ajouter des éléments à un tableau associatif.
andreszs
7
Ajoutez également plusieurs éléments: $ data + = ['x' => 1, 'y' => 2];
fractionné19 du
c'est la façon dont vous ne voulez pas vous retrouver avec plus d'un objet dans le tableau
DragonFire
Remarque: cela peut fonctionner si votre tableau n'a pas déjà d'élément avec la même clé, il ne peut donc pas écraser un élément existant.
Mohamad Hamouday
29

avant la boucle for:

$data = array();

puis dans votre boucle:

$data[] = array($catagory => $question);
moe
la source
2
Si vous le faites de cette façon, n'oubliez pas de lancer d'abord le tableau en utilisant $ data = array (); ou bien php jettera un avis
Alex Bailey
Je pense que SO met en cache ma réponse, comme je l'ai postée, j'ai réalisé que je ne l'avais pas vue initialisée dans son code. Alors je l'ai ajouté et j'ai vu ton commentaire après, merci :-)
moe
4
Cela n'a pas fonctionné car il a créé un tableau à l'intérieur du tableau. Désolé si ma question vous traverse un peu.
Phil
PHP 5.4+ vous pouvez écrire un peu moins de code:$data=[]; $data[] = [$category => $question];
Justin
$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];échoue avec l' index non défini: foo in .. , mais le signe plus suggéré ci-dessous fonctionne.
qrtLs
7

Je sais que c'est une vieille question mais vous pouvez utiliser:

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

Cela poussera le arrayà la fin de votre courant array. Ou si vous essayez simplement d'ajouter des valeurs uniques à la fin de votre tableau, pas plus de tableaux, vous pouvez utiliser ceci:

array_push($data,$question);
Mike
la source
6

Pour tous ceux qui ont également besoin d'ajouter dans un tableau associatif 2d, vous pouvez également utiliser la réponse donnée ci-dessus et utiliser le code comme celui-ci

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

vous pouvez alors l'appeler (pour tester le résultat en:

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

qui devrait afficher $ question

maximran
la source