如果我这样做:
$new_arr = array(
0 => 'keyboard',
1 => 'mouse',
2 => 'computer'
);
print_r(json_encode($new_arr));
输出:
[ “键盘”, “鼠标”, “计算机”]
但是我说我从我的数据库中获取所有“product”表行并执行此操作:
$product_with_id_map = array();
foreach($query as $result) {
$product_with_id_map[$result->id] = $result->name;
}
print_r(json_encode($product_with_id_map));
输出:
{ “0”: “键盘”, “1”: “鼠标”, “2”: “计算机”}
我真的需要保留数组的键,当我json_encode你能告诉我如何在第一个例子中实现第二个输出吗?
答案 0 :(得分:8)
使用选项(since PHP 5.3):
print_r(json_encode($product_with_id_map, JSON_FORCE_OBJECT));
答案 1 :(得分:6)
将数组转换为object。
$new_arr = array(
0 => 'keyboard',
1 => 'mouse',
2 => 'computer'
);
print_r(json_encode((object)$new_arr));
// output: {"0":"keyboard","1":"mouse","2":"computer"}
的 Addtion:强> 的
如果你在javascript中使用这个结果,我建议你使用数组,数组也是javascript中的对象,此外,它为你提供了更多的方法和length
属性。
答案 2 :(得分:2)
这种情况正在发生,因为从数据库返回的索引将作为字符串返回,因此也会在JSON中进行编码。当你自己创建数组时,你将它们设置为整数,因此它们被忽略了。
您可以尝试
$new_arr = array(
'0' => 'keyboard',
'1' => 'mouse',
'2' => 'computer'
);
print_r(json_encode($new_arr));
或者您可以将数组转移到一个将保留索引的对象中。
print_r(json_encode((object)$new_arr));