注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

简说PHP JSON问题(有序无序问题)  

2010-07-05 23:26:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
简说PHP JSON问题(有序无序问题)
首先 什么是JSON:
通俗的说,它是一种数据的存储格式,就像PHP序列化后的字符串一样。它是一种数据描述。比如我们将一个数组序列化后存放,就可以很容易的反序列化后应 用。JSON也是如此,只不过他搭建的是客户端Javascript和服务端PHP的交互桥梁。我们用PHP生成JSON后的字符串,然后把这个字符串传 给前台Javascript,Javascirpt就可以很容易的将其反JSON然后应用。说通俗点,它真的很像数组。(ps:为了尊重别人劳动成果,说明一下这段文字不是我所写)

PHP中的JSON
PHP5.2开始内置了JSON的支持。当然,如果低于这个版本的话,那么市面上有很多PHP版本的实现,现在主要是说说PHP内 置支持的JSON。两个函数:json_encode(编码)和json_decode(解码).eg:

$a2 = array('0'=>3,'1'=>'admin1','2'=>'boy1');

echo json_encode($a2);

将输出: [3,"admin1","boy1"]

JS中的JSON
一般JS中有两种形式上的JSON格式的数据:
 A:[{"id":3,"user":"admin1","sex":"boy1"}]

B: {"1":{"id":3,"user":"admin1","sex":"boy1"}}

A与B的区别在于:前面一个(A),对于js来说是一个数组,并且是有序的,可以取到长度,且数组里面的元素是json。
后面一个(B),对于js来说是一个二维json,不能取到长度,在某些浏览器无序。但取值都推荐使用:obj['key']['key'] 这种方式。eg: var b = {"1":{"id":3,"user":"admin1","sex":"boy1"}} 则取值为:var id = b['1']['id'];

(另注:此段说明来致JS Mix网站,更多关于JS中的JSON说明请进此网站:http://www.jsmix.com/非常不错的研究前端技术的网站哟 )

重点(有序无序问题):
好了,上面很简单的说了说PHP 与 JS? 中的JSON。
那么现在,出现了一个有趣的问题。

问题描述: 在用PHP 的JSON_ENCODE实现输出JSON数据时,如果传入的数组的KEY值是数字有序形式(即:KEY值是从0,1,2,3,4,5.......N,0值不能少)的,那么将输出一个JS格式上的数组数据(
数组里面的元素是json);如果不是,那么将输出一个JS格式上的JSON数据。

问题验证
? EG1:? (无序)?
$a2 = array('id'=>3,'name'=>'admin1','2'=>'boy1');
echo json_encode($a2);
?这将输出: {"id":3,"name":"admin1","2":"boy1"}

?EG2: (无序)
$a2 = array('0'=>3,'2'=>'admin1','1'=>'boy1');
echo json_encode($a2);
?这将输出:{"0":3,"2":"admin1","1":"boy1"}

EG3 (有序)
$a2 = array('0'=>3,'1'=>'admin1','2'=>'boy1');
echo json_encode($a2);
这将输出:[3,"admin1","boy1"]

EG3(二维数组无序,KEY值没有从0开始)
$a1 = array(
'1'=>array('id'=>3,'user'=>'admin1','sex'=>'boy1'),
'2'=>array('id'=>4,'user'=>'admin2','sex'=>'boy2'),
'3'=>array('id'=>5,'user'=>'admin3','sex'=>'boy3')
);
echo json_encode($a1);
这将输出:{"1":{"id":3,"user":"admin1","sex":"boy1"},"2":{"id":4,"user":"admin2","sex":"boy2"},"3":{"id":5,"user":"admin3","sex":"boy3"}}

EG4(二维数组有序,KEY值从0 开始)
$a1 = array(
'0'=>array('id'=>3,'user'=>'admin1','sex'=>'boy1'),
'1'=>array('id'=>4,'user'=>'admin2','sex'=>'boy2'),
'2'=>array('id'=>5,'user'=>'admin3','sex'=>'boy3')
);
echo json_encode($a1);
这将输出:[{"id":3,"user":"admin1","sex":"boy1"},{"id":4,"user":"admin2","sex":"boy2"},{"id":5,"user":"admin3","sex":"boy3"}]

那么 对比以上例子,再联想到(“对于js来说是一个json,不能取到长度,在某些浏览器无序”)这句话,可以想到PHP自作主张的帮我识别了你的数据在输出时是否是需要有序输出。

(另注:1?? 以上仅是我个人观点,可能理解不透彻,有错的地方,十分欢迎指出来。
2 ? 前端技术支持BLOG: http://www.jsmix.com/?

fc_lamp推荐阅读:
  评论这张
 
阅读(816)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017