php 无限级数据JSON格式及JS解析


Posted in PHP onJuly 17, 2010

Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~)

//--查询用户下线信息,返回JSON,用于flash 
if(!empty($_GET['action'])&&!empty($_GET['invite'])){ 
//固定参数请求才会返回信息 
if($_GET['action']=='getinfo'&&$_GET['invite']==1){ 
//数据实体,一个实体类 
class UcInvite{ 
//---显示用的数据信息 
public $fuid; //用户id 
public $funame; //用户名 
public $furl; //用户空间地址 
//---显示用的数据信息 
public $fchilds; //子类集合 
} 
$invitecount = 0; //总数量,用于记录全部下线数量 
//递归实现方法 
function GetShowTreeInvite($uid){ 
global $_SGLOBAL,$invitecount; 
//组织sql语句并查询,表中fuid是下线的id,uid是父id,fusername是用户名字 
$inv_sql = "select fuid,fusername from ".tname("invite")." where uid = ".$uid; 
$inv_query = $_SGLOBAL['db']->query($inv_sql); 
//下表及返回数组 
$index = 0; 
$inviteTree = Array(); 
$invitezcount = 0; //每个子类下的数量 
//循环添加信息到数组 
while($v = $_SGLOBAL['db']->fetch_array($inv_query)){ 
$ui = new UcInvite(); 
$ui->fuid = $v['fuid']; 
$ui->funame = $v['fusername']; 
$ui->furl = "/home/space.php?uid=".$v['fuid']; 
//调用自己,递归查询子类信息 
$ui->fchilds=GetShowTreeInvite($v['fuid']); 
//插入返回的数组中 
$inviteTree[$index]=$ui; 
$index++; 
$invitecount++; 
$invitezcount++; 
} 
//记录当前下线的下线数量 
$inviteTree['invitezcount'] = $invitezcount; 
//返回数组信息 
return $inviteTree; 
} 
$fuid = empty($_GET['fuid'])?$space[uid]:$_GET['fuid']; 
//根据当前登录用户ID查询信息,并返回一个集合 
$inviteTree = GetShowTreeInvite($fuid); 
//记录总下线数 
$inviteTree['invitecount'] = $invitecount; 
//引入json库,这里用的是Services_JSON 
//因为并不确定服务器都是PHP5.2以上版本,所以没有用自带的JSON函数 
require_once('../plugins/JSON/JSON.php'); 
//json输出 
$json = new Services_JSON(); 
echo $json->encode($inviteTree); 
exit; 
}else{ 
echo '请求参数错误!'; 
exit; 
} 
} 
//--查询用户下线信息,返回JSON,用于flash

以上代码返回一个JSON字符串,如:
{'0':{'fuid':'950','funame':'郭梓原','furl':'/home/space.php?uid=950','fchilds':{'invitezcount':0}},'invitezcount':1,'invitecount':1}
这里只查询了一个
接下来用JS进行以下解析:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<script type="text/javascript"> 
//fuid 用户ID 
//funame 用户名称 
//furl 用户主页地址 
//invitezcount 每个用户的子类数量 
//invitecount 该用户的所有下级数量 
var str = ""; 
function GetShow(obj,qi,index){ 
for (var one in obj) 
{ 
for(var key in obj[one]) 
{ 
index++; 
if(key=="fchilds"&&obj[one][key]['invitezcount']!=0){ 
var aqi = qi; 
if(index>1)aqi+="     " 
GetShow(obj[one][key],aqi,index) 
} 
if(key != 'fchilds'){ 
if(key=="fuid"){ 
str += qi+key+"="+obj[one][key] + ","; 
}else{ 
str += key+"="+obj[one][key] + ","; 
} 
if(key == "furl"){ 
str+="<br/>"; 
} 
} 
} 
if(one=="invitezcount"||one=="invitecount"){ 
str+=qi+one+"="+obj[one]+"<br/>"; 
} 
} 
} 
//固定参数do=charadegarden&action=getinfo&invite=1,fuid为测试时使用,不填写将调用系统当前登录的用户ID 
var url = 'http://localhost/home/space.php?do=charadegarden&action=getinfo&invite=1&fuid=344'; 
$.get(url,function(html){ 
//获得json并转为对象 
if(html){ 
var obj = eval("["+html+"]"); 
GetShow(obj[0],"",1) 
document.write(str); 
document.write("<br/><br/><br/><br/>"); 
document.write("<b>JSON格式:</b><br/>"); 
document.write(html); 
} 
}); 
</script>

这样,两个无限级的操作就完成了,结果截图:

php 无限级数据JSON格式及JS解析

珍惜劳动成果,虽说内容不多,可是也是一个一个字打上的,转载请注明!!关注爱拼可乐吧

PHP 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
php下使用strpos需要注意 === 运算符
Jul 17 #PHP
按上下级层次关系输出内容的PHP代码
Jul 17 #PHP
PHP开发负载均衡指南
Jul 17 #PHP
PHP无敌近乎加密方式!
Jul 17 #PHP
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 #PHP
PHP实现多条件查询实例代码
Jul 17 #PHP
php程序效率优化的一些策略小结
Jul 17 #PHP
You might like
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
JavaScript While 循环基础教程
2007/04/05 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
解决bootstrap中下拉菜单点击后不关闭的问题
2018/08/10 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
原生js实现拖拽移动与缩放效果
2020/08/24 Javascript
在Python中使用成员运算符的示例
2015/05/13 Python
django的model操作汇整详解
2019/07/26 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
日本小田急百货官网:Odakyu
2018/07/19 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
受伤赔偿协议书
2014/09/24 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
干部培训简讯
2015/07/20 职场文书
财务管理制度范本
2015/08/04 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers
nginx 添加http_stub_status_module模块
2022/05/25 Servers