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 相关文章推荐
从零开始 教你如何搭建Discuz!4.1论坛
Jul 07 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 PHP
浅析PHP echo 和 print 语句
Jun 30 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的开发框架的现状和展望
2007/03/16 PHP
php牛逼的面试题分享
2013/01/18 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
如何判断Javascript对象是否存在的简单实例
2016/05/18 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
月度优秀员工获奖感言
2014/08/16 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书