J'ai le tableau suivant en PHP:
_Array
(
[0] => Array
(
[id] => 0
[name] => name1
[short_name] => n1
)
[2] => Array
(
[id] => 2
[name] => name2
[short_name] => n2
)
)
_
Je veux l'encoder en tant que tableau JSON, produisant une chaîne comme celle-ci:
_[
{
"id":0,
"name":"name1",
"short_name":"n1"
},
{
"id":2,
"name":"name2",
"short_name":"n2"
}
]
_
Mais quand j'appelle json_encode
sur ce tableau, j'obtiens ce qui suit:
_{
"0":{
"id":0,
"name":"name1",
"short_name":"n1"
},
"2":{
"id":2,
"name":"name2",
"short_name":"n2"
}
}
_
qui est un objet au lieu d'un tableau.
Comment puis-je obtenir _json_encode
_ coder mon tableau en tant que tableau, à la place?
Vous observez ce comportement parce que votre tableau n'est pas séquentiel - il a les clés _0
_ et _2
_, mais n'a pas _1
_ en tant que clé.
Avoir juste des index numériques ne suffit pas. _json_encode
_ ne codera votre tableau PHP sous forme de tableau JSON que si votre tableau PHP est séquentiel - autrement dit, si ses clés sont 0, 1, 2, 3,. ..
Vous pouvez réindexer votre tableau séquentiellement à l'aide de la fonction array_values
pour obtenir le comportement souhaité. Par exemple, le code ci-dessous fonctionne correctement dans votre cas d'utilisation:
_echo json_encode(array_values($input)).
_
Array
dans JSON
sont des tableaux indexés niquement, la structure que vous essayez d'obtenir n'est donc pas valide Json/Javascript.
Les tableaux d'associations PHP sont des objets au format JSON. Par conséquent, à moins que vous n'ayez pas besoin de l'index, vous ne pouvez pas effectuer de telles conversions.
Si vous voulez avoir une telle structure, vous pouvez faire:
$indexedOnly = array();
foreach ($associative as $row) {
$indexedOnly[] = array_values($row);
}
json_encode($indexedOnly);
Will retourne quelque chose comme:
[
[0, "name1", "n1"],
[1, "name2", "n2"],
]
json_decode ($ jsondata, true);
true transforme toutes les propriétés en tableau (séquentiel ou non)