J'ai un tableau simple: Lorsque j'encore le tableau à l'aide de JSON_ENCODE (), je reçois la suivi: P> ["Kum","Kumpel"]
5 Réponses :
"{}" Supports spécifient un objet et "[[]" sont utilisés pour les tableaux selon la spécification JSON. Les tableaux n'ont pas d'énumération, si vous le regardez du point de vue de l'allocation de mémoire. Ce ne sont que des données suivies de plus de données, des objets d'autre part ont des propriétés avec des noms et les données sont attribuées aux propriétés, par conséquent pour encoder un tel objet, vous devez également transmettre les noms de propriété appropriés. Mais pour la matrice, vous n'avez pas besoin de spécifier les index, car ils seront toujours 0..n, où n est la longueur de la matrice - 1, la seule chose qui compte est l'ordre des données.
$array = array("a","b","c"); json_encode($array); // ["a","b","c"] json_encode($array, JSON_FORCE_OBJECT); // {"0":"a", "1":"b","2":"c"}
Pas exactement, je reçois cet avertissement: AVERTISSEMENT: JSON_ENCODE () attend exactement 1 paramètre, 2 donné ..
"5.3.0 Le paramètre Options a été ajouté."
Volkerk, merci. Cela fait quelque temps depuis que j'ai utilisé PHP, mais je pense que j'ai eu une version bêta de 5,3 à l'époque, car je me souviens d'avoir utilisé ces paramètres d'option.
Presque 5 ans après cette réponse, Ce paramètre manque toujours dans certaines traductions a> ...
Étant donné que vous avez un tableau PHP avec des clés numériques, il n'est pas nécessaire d'utiliser un objet JavaScript. Mais si vous en avez besoin, essayez la suggestion de Maiku Mori. P>
Comme dit Gumbo, sur le côté JS, cela n'aura pas d'importance. Pour forcer PHP à cela, essayez ceci:
$a = new stdClass(); $a->{0} = "Kum"; $a->{1} = "Kumpel"; echo json_encode($a);
IHMO: C'est la bonne façon lorsque vous devez être sûr qu'un objet imbriqué sera sérialisé comme {...} et d'autres tableaux imbriqués seront sérialisés comme [...]
juste jeté comme un objet et ça fonctionnera bien ... Le paramètre json_force_Object fait exactement la même chose.
$array = (object)$array; $array = (array)$array; json_encode($array);
Je pense personnellement que c'est un bug qui doit être corrigé dans PHP. Json_force_Object n'est absolument pas une réponse. Si vous essayez de faire une sorte de programmation générique, vous vous êtes déclenché constamment. Par exemple, ce qui suit est valide PHP: p>
Array ("0" => Array (0,1,2,3), "1" => matrice (4,5,6,7)); P>
et doit être converti en p>
{"0": [0,1,2,3], "1": [4,5,6,7]} p>
Pourtant, PHP s'attend à ce que je puisse accepter p>
[[0,1,2,3], [4,5,6,7]] p>
ou p>
{"0": {"0": 1, "1": 1, "2": 2, "3": 3}, "1": {"0": 4, "1": 5 , "2": 6, "3": 7}} p>
dont aucun des deux n'est juste du tout. Comment puis-je éventuellement décoder un objet comme ça? Quelle raison possible est là pour changer de quelque chose qui utilise clairement des chaînes comme index? C'est comme PHP essayait d'être intelligent pour aider les personnes idiotes qui ne peuvent pas différencier les chaînes d'INTS, mais dans le processus gâché légitimement utiliser des cordes en tant qu'index, quelle que soit la valeur de la valeur. P>