将php关联数组转换为javascript对象

2021/01/25 13:11 · jquery ·  · 0评论

我正在尝试将中文单词作为键,并将它们的英文翻译作为值从数据库加载到php数组中,以便随后可以在JavaScript的客户端上使用它们。因此,我将PHP key:value对加载到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 ,

您可以使用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);
});

Rohan Kumar的答案非常好,除了它使用jQuery来显示结果。

这可以更快,更容易:

var words = <?php echo json_encode( $wordsArray ) ?>;
console.dir(words);

这样可以得到一行结果,例如Object ▶单击将打开对象并显示其内容。

我花了很多时间来寻找一种优雅的解决方案来解决此问题,而无需通过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!');
        }
    }
}

对我来说,将php数组转换为javascript对象的最简单方法是先对php数组进行json_encode编码,然后再从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;
}
本文地址:http://jquery.askforanswer.com/jiangphpguanlianshuzuzhuanhuanweijavascriptduixiang.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!