json_encode()PHP的不同结果
如果我这样做:json_encode()PHP的不同结果,php,json,codeigniter,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_i
$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_编码时,我确实需要保留数组的键。您能否告诉我如何实现第一个示例中的第二个输出?将数组强制转换为对象
$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
属性。使用选项():
之所以会发生这种情况,是因为从数据库返回的索引是以字符串的形式返回的,因此也被编码到JSON中。当您自己创建数组时,您将它们设置为整数,因此它们被忽略 你可以试试
$new_arr = array(
'0' => 'keyboard',
'1' => 'mouse',
'2' => 'computer'
);
print_r(json_encode($new_arr));
或者,您可以将数组转换为一个对象,该对象将保留索引
print_r(json_encode((object)$new_arr));
这样我就把你的问题答对了:第二种输出形式是你想要的,对吧?是的,我确实想在我的json_编码中保留数组键“我真的需要在我进行json_编码时保留数组键…”好吧,从技术上讲,你有。两个示例中的键相同。但第一个是数组,另一个只是一个对象,其属性键完全由数字组成。如果解码这个JSON的语言是JavaScript,这是一个非常微妙的区别(因为数组键是JavaScript中的字符串--)。其他语言可能会有所不同。@T.J.Crowder-hmm谢谢,这个json技术非常新,非常好用,你能告诉我为什么会得到不同的结果吗?@user1537158-因为数组对json中的对象的作用不同。@xdazz:你甚至不需要将数组转换成对象。json_encode的输出可以包含键,因为他使用递增的数字序列来构造数组,所以json_encode的输出忽略了键。当他将json_编码的字符串转换回数组时,这实际上并不起作用,键将以增量顺序返回。尝试将键
1
更改为4
,然后查看json\u编码output@xdazz,将在4分钟内接受此答案,谢谢again@ShaktiSingh那么,您在这里的意思是什么?您的第一段代码将无法工作,除非您将数组强制转换为对象,否则它不会产生任何差异。
print_r(json_encode((object)$new_arr));