Maison > développement back-end > tutoriel php > Pourquoi « json_encode » de PHP convertit-il les tableaux clairsemés en objets JSON ?

Pourquoi « json_encode » de PHP convertit-il les tableaux clairsemés en objets JSON ?

Barbara Streisand
Libérer: 2024-11-27 08:50:10
original
488 Les gens l'ont consulté

Why Does PHP's `json_encode` Convert Sparse Arrays to JSON Objects?

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));
Copier après la connexion

Sortie :

[{
    "abc": "123"
},{
    "jkl": "234"
},{
    "nmo": "567"
}]
{
    "0": {
        "abc": "123"
    },
    "2": {
        "nmo": "567"
    }
}
Copier après la connexion

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)));
Copier après la connexion
[{
    "abc": "123"
},{
    "nmo": "567"
}]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal