以字符串格式获取MySQL存储的数组并转换为JSON对象中的数组

时间:2015-08-12 18:51:49

标签: javascript php mysql arrays json

我有一个存储在mysql表中的数组,如下所示:

[3,5,6,7,8]

当我选择它时,在PHP中将其编码为JSON,然后将其解析为javascript对象,而不是成为一个数组,它只是变成一个字符串" [3,5,6,7,8] &#34 ;.我知道它不可能将它作为一个数组存储在一个字段中,所以..我能做什么才能正确转换为数组而不是字符串?

我目前的代码:

test = JSON.parse('[{"id":43,"incidence":"[0,3,6,7]"}]')

我可以解决它删除"在字符串上,但是mysql用字符串返回它,php用引号和javascript用引号解析。基本上,有没有办法在这个过程中删除它?

2 个答案:

答案 0 :(得分:2)

问题在于如何在将数组转换为JSON之前构建数组。由于您是从数据库中检索这些结果,我假设您正在构建一个多维数组,可能看起来像这样:

$results = array(
    array(
        "id" => 43,
        "incidence" => "[0,3,6,7]"
    )
);

因为incidence是一个字符串,所以在JS中使用它时会给你这些错误。要解决此问题,您需要将该字符串转换为数组。现在,由于您可能有多个结果(因为这些是数据库结果),您需要遍历结果数组并将该字符串转换为如下数组:

foreach ($results as &$row) { // <-- notice the & symbol (Passing by reference)
    $no_brackets = trim($row["incidence"], '[]');//if you stored your array as comma delimited value, you would not need this.
    $row["incidence"] = explode(',', $no_brackets);
}

最后,使用json_encode并将其传递给JS。

最终结果:

<?php
foreach ($results as &$row) {
    $no_brackets = trim($row["incidence"], '[]');
    $row["incidence"] = explode(',', $no_brackets);
}
$json = json_encode($results);
?>

<script>
    var obj = JSON.parse('<?= $json ?>');
    console.log(obj);
</script>

希望这有帮助。

答案 1 :(得分:0)

你需要做一些小小的工作才能让它发挥作用。

试试这个

<?php

$string = '[3,5,6,7,8]';
$t = str_replace(array('[',']'), '', $string);
$array = explode(',', $t);
echo json_encode($array);

结果是

["3","5","6","7","8"]