Maison >développement back-end >tutoriel php >Pourquoi `json_encode` renvoie-t-il parfois un objet JSON au lieu d'un tableau en PHP ?

Pourquoi `json_encode` renvoie-t-il parfois un objet JSON au lieu d'un tableau en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 08:51:09617parcourir

Why Does `json_encode` Sometimes Return a JSON Object Instead of an Array in PHP?

Encodage de tableaux PHP en tant que tableaux JSON

Lors de la conversion de tableaux PHP en JSON à l'aide de json_encode, vous pouvez rencontrer un problème où la sortie est un objet au lieu d'un tableau. Cet écart se produit lorsque les clés de votre tableau ne sont pas séquentielles.

Selon le format d'échange de données JSON, un tableau est représenté sous forme de crochets entourant les valeurs séparées par des virgules :

[value, value, value]

Pour json_encode à affichez votre tableau sous forme de tableau JSON, il doit être séquentiel, ce qui signifie que ses clés doivent être des entiers consécutifs commençant par 0.

Exemple :

$input = [
    ['id' => 0, 'name' => 'name1', 'short_name' => 'n1'],
    ['id' => 2, 'name' => 'name2', 'short_name' => 'n2']
];

Si vous essayez d'encoder en json ce tableau, vous obtiendrez un objet JSON au lieu d'un tableau :

{
    "0": {
        "id": 0,
        "name": "name1",
        "short_name": "n1"
    },
    "2": {
        "id": 2,
        "name": "name2",
        "short_name": "n2"
    }
}

Solution :

Pour résoudre ce problème, vous devez réindexer votre tableau séquentiellement en utilisant array_values() :

$input_sequential = array_values($input);
$json_array = json_encode($input_sequential);

Cette opération entraînera une représentation sous forme de chaîne JSON sous forme de tableau :

[
    {
        "id": 0,
        "name": "name1",
        "short_name": "n1"
    },
    {
        "id": 2,
        "name": "name2",
        "short_name": "n2"
    }
]

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