5

如果我这样做:

$new_arr = array(
0 => 'keyboard',
1 => 'mouse',
2 => 'computer'
);

print_r(json_encode($new_arr));

输出:

[“键盘”,“鼠标”,“电脑”]

但是假设我从我的数据库中获取“产品”表的所有行并且我这样做:

$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 时,我真的需要保留数组的键,你能告诉我如何在第一个示例中实现第二个输出吗?

4

3 回答 3

8

使用选项(自 PHP 5.3 起):

print_r(json_encode($product_with_id_map, JSON_FORCE_OBJECT));
于 2012-09-24T09:40:05.950 回答
6

将数组转换为对象。

$new_arr = array(
  0 => 'keyboard',
  1 => 'mouse',
  2 => 'computer'
);

print_r(json_encode((object)$new_arr));
// output: {"0":"keyboard","1":"mouse","2":"computer"}

补充: 如果你在javascript中使用这个结果,我建议你使用数组,数组在javascript中也是对象,而且它为length你提供了更多的方法和属性。

于 2012-09-24T09:38:39.683 回答
3

发生这种情况是因为从数据库返回的索引作为字符串返回,因此也在 JSON 中编码。当您自己创建数组时,您将它们设置为整数,因此它们被忽略。

你可以尝试

$new_arr = array(
'0' => 'keyboard',
'1' => 'mouse',
'2' => 'computer'
);

print_r(json_encode($new_arr));

或者您可以将数组转换为将保留索引的对象。

print_r(json_encode((object)$new_arr));
于 2012-09-24T09:40:24.853 回答