Pourquoi `json_encode` convertit-il les tableaux PHP clairsemés en objets JSON ?

Mary-Kate Olsen
Libérer: 2024-11-21 07:53:08
original
672 Les gens l'ont consulté

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

Tableaux clairsemés codés en tant qu'objets JSON dans json_encode

Lorsqu'un tableau contient un index manquant, il est appelé tableau clairsemé. json_encode, par défaut, gère les tableaux clairsemés en tant qu'objets JSON au lieu de tableaux. Cela peut entraîner un comportement inattendu dans divers scénarios.

Cause de la conversion tableau en objet

La syntaxe JSON ne prend pas en charge les tableaux avec des indices manquants. Lorsque json_encode rencontre un tableau clairsemé, il suppose qu'il s'agit d'un objet et le convertit en conséquence.

Exemple

Considérez le code suivant :

$a = array(
    new stdClass,
    new stdClass,
    new stdClass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

// First JSON encoding
echo json_encode($a) . "\n";

// Unset an element
unset($a[1]);

// Second JSON encoding
echo json_encode($a) . "\n";
Copier après la connexion

Sortie

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

Dans le premier Encodage, le tableau est converti en tableau JSON comme prévu. Cependant, après avoir supprimé l'index 1, le deuxième encodage génère un objet JSON en raison du problème du tableau clairsemé.

Prévention

Pour éviter ce comportement et garantir un encodage de tableau cohérent , vous pouvez utiliser array_values() pour réindexer le tableau avant de le transmettre à json_encode. Cela supprimera tous les trous dans le tableau et garantira qu'il est traité comme un tableau par json_encode.

Code modifié

echo json_encode(array_values($a)) . "\n";
Copier après la connexion

Ce code modifié encodera toujours $a comme un tableau JSON, qu'il ait ou non des indices manquants.

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