json_encode encode les tableaux clairsemés en tant qu'objets JSON
Lorsque des tableaux clairsemés sont codés en JSON (c'est-à-dire des tableaux avec des indices manquants), la fonction json_encode de PHP présente comportement inattendu, convertissant le tableau en un objet JSON au lieu d'un tableau. Pour comprendre ce comportement, examinons un exemple :
$a = array( new stdClass, new stdClass, new stdClass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; printf("%s\n", json_encode($a)); unset($a[1]); printf("%s\n", json_encode($a));
Sortie :
[{ "abc": "123" },{ "jkl": "234" },{ "nmo": "567" }] { "0": { "abc": "123" }, "2": { "nmo": "567" } }
Dans l'encodage initial, json_encode produit un tableau d'objets puisque le tableau clairsemé est valide en tant qu'objet . Cependant, après avoir supprimé un index (1) avec unset, le tableau résultant ne peut pas être codé en tant que tableau car il comporte désormais un trou.
Pour résoudre ce problème et garantir que le tableau reste encodé en tant que tableau, utilisez array_values ($a) avant l'encodage :
printf("%s\n", json_encode(array_values($a)));
[{ "abc": "123" },{ "nmo": "567" }]
En réindexant le tableau avec array_values, tous les espaces sont supprimés, permettant à json_encode pour produire avec succès un tableau JSON valide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!