J'essaie de charger des mots chinois en tant que clés et leurs traductions en anglais sous forme de valeurs d'une base de données dans un tableau php afin que je puisse les utiliser côté client en JavaScript. Je charge donc les paires PHP key: value dans le tableau JavaScript et j'essaie de produire les résultats sous forme de paire clé-valeur en tant que telle:
stuff : Ni, You
stuff : Ta, Him or Her
stuff : Wo, I
Les mots chinois et anglais sont chargés dans une base de données relationnelle.
PHP :
$wordsArray = array();
while ($row = $sql->fetch_assoc()) {
$wordsArray[$row['chinese']] = $row['english'];
}
Javascript: Ici, je veux que $ .each génère la clé sous forme de chaîne, et non pas un index numérique. Donc quand j'ai essayé var words = [<?php echo '"'.implode('","', $wordsArray).'"' ?>];
comme tableau, j'ai eu:
stuff : 0, You
stuff : 1, Him or Her
stuff : 2, I
Quand je cherche vraiment:
stuff : Ni, You
stuff : Ta, Him or Her
stuff : Wo, I
J'ai donc changé words
pour être un objet afin que $.each
Puisse sortir la clé sous forme de chaîne:
var words = {<?php echo '"'.implode('","', $wordsArray).'"' ?>};
$.each(words, function(key, value) {
console.log('stuff : ' + key + ", " + value);
});
Ce qui génère une erreur: SyntaxError: Unexpected token ,
Vous pouvez utiliser json_encode () pour créer array
comme json object
comme,
var words = <?php echo json_encode($wordsArray) ?>;// don't use quotes
$.each(words, function(key, value) {
console.log('stuff : ' + key + ", " + value);
});
J'ai beaucoup cherché une solution élégante pour résoudre ce problème sans changer les choses sur javascript ou simplement remplacer les guillemets via preg_replace (dans le cas où les valeurs contiendraient des guillemets) et finir par le faire moi-même. même s'il est trop tard, j'espère que cela aiderait ceux qui recherchent la même solution.
function json_encode_advanced(array $arr, $sequential_keys = false, $quotes = false, $beautiful_json = false) {
$output = "{";
$count = 0;
foreach ($arr as $key => $value) {
if ( isAssoc($arr) || (!isAssoc($arr) && $sequential_keys == true ) ) {
$output .= ($quotes ? '"' : '') . $key . ($quotes ? '"' : '') . ' : ';
}
if (is_array($value)) {
$output .= json_encode_advanced($value, $sequential_keys, $quotes, $beautiful_json);
} else if (is_bool($value)) {
$output .= ($value ? 'true' : 'false');
} else if (is_numeric($value)) {
$output .= $value;
} else {
$output .= ($quotes || $beautiful_json ? '"' : '') . $value . ($quotes || $beautiful_json ? '"' : '');
}
if (++$count < count($arr)) {
$output .= ', ';
}
}
$output .= "}";
return $output;
}
function isAssoc(array $arr) {
if (array() === $arr) return false;
return array_keys($arr) !== range(0, count($arr) - 1);
}
usage:
$array = [
'someField' => '"value"', // double quotes for string if needed
'labelField' => '"label"', // double quotes for string if needed
'boolean' => false,
'numeric' => 5,
'render' => [
'option' => 'function() {
console.log("Hello World!");
console.log(\'Hello World!\');
}',
],
];
echo json_encode_advanced($array);
résultat:
{
someField : "value",
labelField : "label",
boolean : false,
numeric : 5,
render : {
option : function() {
console.log("Hello World!");
console.log('Hello World!');
}
}
}
La réponse de Rohan Kumar est excellente utilise uniquement jQuery pour afficher ses résultats. Vous pouvez le faire plus facilement et plus petit, voir ci-dessous.
var words = <?php echo json_encode( $wordsArray ) ?>;
console.dir(words);
Vous donne un résultat d'une ligne (Objet ▶), en cliquant sur le ▶ ouvrira l'objet et affichera son contenu.
Je viens de changer quelques éléments pour le rendre plus compatible (lignes 3 et 29):
function json_encode_advanced(array $arr, $sequential_keys = false, $quotes = false, $beautiful_json = false) {
$output = isAssoc($arr) ? "{" : "[";
$count = 0;
foreach ($arr as $key => $value) {
if (isAssoc($arr) || (!isAssoc($arr) && $sequential_keys == true )) {
$output .= ($quotes ? '"' : '') . $key . ($quotes ? '"' : '') . ' : ';
}
if (is_array($value)) {
$output .= json_encode_advanced($value, $sequential_keys, $quotes, $beautiful_json);
}
else if (is_bool($value)) {
$output .= ($value ? 'true' : 'false');
}
else if (is_numeric($value)) {
$output .= $value;
}
else {
$output .= ($quotes || $beautiful_json ? '"' : '') . $value . ($quotes || $beautiful_json ? '"' : '');
}
if (++$count < count($arr)) {
$output .= ', ';
}
}
$output .= isAssoc($arr) ? "}" : "]";
return $output;
}