PHP中用JSON_ENCODE方法转换数组时候遇到的问题

落舞者 发布于 2013/11/19 17:29
阅读 13K+
收藏 1

在写一个程序的时候遇到了一个问题:

前端框架js,输出菜单,这个菜单格式是个json

形如:

var config=[{
			"id": "index", 
			"homePage": "main", 
			"menu": [{
						"text": "测试", 
						"items": [{
							"id": "main", 
							"text": "首页", 
							"href": "Index/index"
						}]
					},{
						"text": "测试2", 
						"items": [{
							"id": "main2", 
							"text": "首页", 
							"href": "Index/index"
						}]
					}
					]
		}];
但是php用json_encode方法时候,会遇到问题。

因为:

PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)。

由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

比如,现在有一个索引数组

  $arr = Array('one', 'two', 'three');   
  echo json_encode($arr);   

结果为:

  ["one","two","three"]   

如果将它改为关联数组:

  $arr = Array('1'=>'one', '2'=>'two', '3'=>'three');   
  echo json_encode($arr);     

结果就变了:

  {"1":"one","2":"two","3":"three"}

那么怎么输出上面的我想要的格式呢?除了手动拼接。和改动前端框架。

我的数组:$a=array(id=>'index',homePage=>'main',menu=>array(text=>'测试',items=>array(id=>'main',text=>'首页',href=>'Index/index')));



加载中
0
落舞者
落舞者

不太完美的解决方法:就是嵌套数组:

$menu=array(array(id=>'index',homePage=>'main',menu=>array(array(text=>'测试',items=>array(array(id=>'main',text=>'首页',href=>'Index/index'))))));

0
游侠
游侠

PHP索引数组转换成json是数组,php关联数组转换成json是对象。

楼主懂了吗?

游侠
游侠
回复 @落舞者 : 主要是没看懂你想问什么。
落舞者
落舞者
我上面提到了啊。
0
z
zhangzyj
$arr = Array('one', 'two', 'three');

可以改成


$arr = Array('0'=>'one', '2'=>'two', '1'=>'three');

就没有问题了;从0开始的key打乱一下顺序就可以了.

返回顶部
顶部