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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-21 07:53:08768parcourir

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

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!

Déclaration:
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