115 votes

Tableau PHP vers tableau JSON en utilisant json_encode() ;

J'ai encodé un tableau que j'ai créé en utilisant la fonction intégrée json_encode(); fonction. J'en ai besoin au format d'un tableau de tableaux, comme ceci :

[["Afghanistan",32,12],["Albania",32,12]]

Cependant, il revient comme :

{"2":["Afghanistan",32,12],"4":["Albania",32,12]}

Comment puis-je supprimer ces numéros de ligne sans utiliser de trucage Regex ?

215voto

Michael Berkowski Points 137903

Si les clés de votre tableau PHP ne sont pas des nombres consécutifs, json_encode() doit l'autre construit un objet puisque les tableaux JavaScript sont toujours indexés numériquement de manière consécutive.

Utilisez array_values() sur la structure externe en PHP pour supprimer les clés du tableau original et les remplacer par une numérotation consécutive basée sur zéro :

Exemple :

// Non-consecutive 3number keys are OK for PHP
// but not for a JavaScript array
$array = array(
  2 => array("Afghanistan", 32, 13),
  4 => array("Albania", 32, 12)
);

// array_values() removes the original keys and replaces
// with plain consecutive numbers
$out = array_values($array);
json_encode($out);
// [["Afghanistan", 32, 13], ["Albania", 32, 12]]

22voto

json_encode() vous aidera à coder tableau a JSON dans php.

si vous utilisez seulement json_encode directement sans option spécifique, elle retournera un tableau. Comme la question ci-dessus

$array = array(
  2 => array("Afghanistan",32,13),
  4 => array("Albania",32,12)
);
$out = array_values($array);
json_encode($out);
// [["Afghanistan",32,13],["Albania",32,12]]

Puisque vous essayez de convertir Array en JSON, alors je vous suggère d'utiliser JSON_FORCE_OBJECT comme option(s) supplémentaire(s) dans json_encode Comme ci-dessous

<?php
$array=['apple','orange','banana','strawberry'];
echo json_encode($array, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"} 
?>

5voto

Inc33 Points 625

Je voudrais ajouter à la réponse de Michael Berkowski que cela peut également se produire si l'ordre du tableau est inversé, auquel cas il est un peu plus délicat d'observer le problème, car dans l'objet json, l'ordre sera ascendant.

Par exemple :

[
    3 => 'a',
    2 => 'b',
    1 => 'c',
    0 => 'd'
]

Je reviendrai :

{
    0: 'd',
    1: 'c',
    2: 'b',
    3: 'a'
}

La solution dans ce cas, est d'utiliser array_reverse avant de le coder en json

3voto

mstone Points 29

J'ai eu un problème avec les caractères accentués lors de la conversion d'un tableau PHP en JSON. J'ai mis des trucs UTF-8 partout mais rien n'a résolu mon problème jusqu'à ce que j'ajoute ce bout de code dans ma boucle PHP while où je poussais le tableau :

$es_words[] = array(utf8_encode("$word"),"$alpha","$audio");

C'était seulement la variable '$word' qui posait problème. Après, il a fait un jason_encode sans problème.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X