json_encode()PHP的不同结果

时间:2012-09-24 09:35:34

标签: php json codeigniter

如果我这样做:

$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你能告诉我如何在第一个例子中实现第二个输出吗?

3 个答案:

答案 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));