[英]convert php associative array into javascript object
我正在嘗試將中文單詞作為鍵加載,並將它們的英文翻譯作為值從數據庫加載到 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
就可以將 key 輸出為字符串:
var words = {<?php echo '"'.implode('","', $wordsArray).'"' ?>};
$.each(words, function(key, value) {
console.log('stuff : ' + key + ", " + value);
});
拋出錯誤: SyntaxError: Unexpected token ,
您可以使用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!');
}
}
}
Rohan Kumar 的答案非常好,只是它使用 jQuery 來顯示結果。
這可以更快更容易:
var words = <?php echo json_encode( $wordsArray ) ?>;
console.dir(words);
這會給你一個像Object ▶
這樣的單行結果。 單擊▶
將打開對象並顯示其內容。
對我來說,將 php 數組轉換為 javascript 對象的最簡單方法是對 php 數組進行 json_encode,然后像這樣從 javascript JSON.parse 它:
<?php
$array = [1 => "one", 2 => "two", 3 => "three"];
?>
<script>
const jsObject = JSON.parse(`<?= json_encode($array) ?>`)
console.log(jsObject) // Object { 1: "one", 2: "two", 3: "three" }
</script>
我只是更改了一些內容以使其更兼容(第 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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.