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";
Sortie
[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}] {"0":{"abc":"123"},"2":{"nmo":"567"}}
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";
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!