конвертировать php-ассоциативный массив в объект javascript

Я пытаюсь загрузить китайские слова в виде ключей и их перевод на английский язык как значения из базы данных в php-массив, поэтому я могу использовать их на стороне клиента в JavaScript. Поэтому я загружаю пары PHP: значение в массив JavaScript и пытаюсь вывести результаты как пару значений ключа как таковую:

stuff : Ni, You stuff : Ta, Him or Her stuff : Wo, I 

Китайские и английские слова загружаются в реляционную базу данных.

PHP :

 $wordsArray = array(); while ($row = $sql->fetch_assoc()) { $wordsArray[$row['chinese']] = $row['english']; } 

Javascript : Здесь я хочу, чтобы $ .each выводил ключ как строку, а не индекс числа. Поэтому, когда я попробовал var words = [<?php echo '"'.implode('","', $wordsArray).'"' ?>]; как массив, я получил:

 stuff : 0, You stuff : 1, Him or Her stuff : 2, I 

Когда я действительно ищу:

 stuff : Ni, You stuff : Ta, Him or Her stuff : Wo, I 

Поэтому я заменил words как объект таким образом, чтобы $.each мог выводить ключ как строку:

 var words = {<?php echo '"'.implode('","', $wordsArray).'"' ?>}; $.each(words, function(key, value) { console.log('stuff : ' + key + ", " + value); }); 

Что вызывает ошибку: SyntaxError: Unexpected token ,

Solutions Collecting From Web of "конвертировать php-ассоциативный массив в объект javascript"

Вы можете использовать json_encode () для создания array как json object например,

 var words = <?php echo json_encode($wordsArray) ?>;// don't use quotes $.each(words, function(key, value) { console.log('stuff : ' + key + ", " + value); }); 

Я много искал для элегантного решения, чтобы исправить эту проблему, не изменяя вещи по javascript или просто заменяя кавычки через preg_replace (для случая, когда значения будут содержать кавычки), и в конечном итоге сделайте это самостоятельно. даже если уже слишком поздно, я надеюсь, что это поможет тем, кто ищет такое же решение.

 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); } 

Применение:

 $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); 

результат:

 { someField : "value", labelField : "label", boolean : false, numeric : 5, render : { option : function() { console.log("Hello World!"); console.log('Hello World!'); } } } 

Я просто изменил несколько вещей, чтобы сделать его более совместимым (строки 3 и 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; }