PHP对象数组到javascript关联数组

时间:2018-06-15 06:48:44

标签: javascript php arrays json easyautocomplete

我有一个PHP对象数组,如下所示:

array(223) {
  [0]=>
  object(stdClass)#5 (9) {
    ["id"]=>
    string(2) "10"
    ["name"]=>
    string(10) "Cyclops"
    ["address"]=>
    string(13) "GSDG"
  }
  [1]=>
  object(stdClass)#6 (9) {
    ["id"]=>
    string(2) "11"
    ["name"]=>
    string(11) "Professor X"
    ["address"]=>
    string(8) "XX"
  }

我需要将其转换为具有此格式的名称和ID的javascript数组:

var characters = {
    data: [{
            "name": "Cyclops",
            id: 10
        },
        {
            "name": "Professor X",
            id: 11
        }
    ]
}

以下是我的尝试:

首先,我将PHP数组转换为javascript对象,然后使用for循环将每个数组的详细信息推送到javascript对象:

var js_data = <?php echo json_encode($chars) ?>;
var characters = [];

for (var i = 0; i < js_data.length; i++) {
    characters.push({
        data: js_data[i]
    })
}

但这会产生一系列对象,每个对象都有一个&#34;数据&#34;属性。这是testVariable的console.log:

0: {…}
​​​
data: Object { id: "10", name: "Cyclops", … }
​​​
__proto__: Object { … }
​​
1: {…}
​​​
data: Object { id: "11", name: "Professor X", … }

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

不是最困难的任务,因为您几乎拥有所需的格式。首先我必须补充一点,你甚至可能不必过滤掉地址字段,因为插件可能会完全忽略它。如果是这种情况,您可以简单地执行此操作

var characters = <?php json_encode(['data' => $chars]); ?>;

如果您确实需要过滤掉地址字段,可以使用array_map

$chars = array_map(function($item) {
    // at this point, you don't need an object, as json_encode do the
    // same for objects and associative arrays
    return [
        "id" =>$item->id,
        "name" => $item->name
    ];
}, $chars);

答案 1 :(得分:1)

您可以将最后一个javascript JSON数组转换为

var characters = {
data: [{
        "name": "Cyclops",
        id: 10
    },
    {
        "name": "Professor X",
        id: 11
    }
]

}

使用您的PHP代码结果

0: {…}

data:Object {id:&#34; 10&#34 ;, name:&#34; Cyclops&#34;,...} proto :对象{...} 1:{...} data:Object {id:&#34; 11&#34;,name:&#34; X教授&#34;,...}

使用需要将最终的结果存储到js变量中,并且可以使用forEach将变量推送到另一个js数组,例如  如果结果是

var a=[{data:{id:"10",name:"Cyclops"}},{data:{id:"11",name:"Professor X"}}]

然后使用

var b=[]
a.forEach(x=>{b.push(x.data)});

它会得到以下结果

  

(2)[{...},{...}]   0   :   {id:&#34; 10&#34;,名称:&#34;独眼巨人&#34;}   1   :   {id:&#34; 11&#34 ;,姓名:&#34; X教授&#34;}   长度   :   2   的   :   阵列(0)

我希望它能帮到你