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.

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

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

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

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.