Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
json_encode()PHP的不同结果_Php_Json_Codeigniter - Fatal编程技术网

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