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 相关文章推荐
用PHP和ACCESS写聊天室(六)
Oct 09 PHP
动态生成gif格式的图像要注意?
Oct 09 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
PHP异常处理浅析
May 12 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
PHP中empty,isset,is_null用法和区别
Feb 19 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
Mar 16 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 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
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
js获取url参数的使用扩展实例
2007/12/29 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
js设置文字颜色的方法示例
2016/12/30 Javascript
javascript中replace使用方法总结
2017/03/01 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
python字符串连接方式汇总
2014/08/21 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python 弧度与角度互转实例
2020/04/15 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
如何执行一个shell程序
2012/11/23 面试题
小学少先队活动方案
2014/02/18 职场文书
医学求职自荐信
2014/06/21 职场文书
要账委托书范本
2014/09/15 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
四风之害观后感
2015/06/09 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python