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调用三种数据库的方法(1)
Oct 09 PHP
使用 eAccelerator加速PHP代码的方法
Sep 30 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
Dec 29 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
Jun 03 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
php实现当前页面点击下载文件的实例代码
Nov 16 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
python类参数self使用示例
2014/02/17 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
大学生工作推荐信范文
2013/12/02 职场文书
教师的实习鉴定
2013/12/15 职场文书
幼儿园大班教学反思
2014/02/10 职场文书
善意的谎言事例
2014/02/15 职场文书
高中军训第一天感言
2014/03/06 职场文书
2014年国培研修感言
2014/03/09 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
病媒生物防治方案
2014/05/13 职场文书
天那边观后感
2015/06/09 职场文书
施工现场安全管理制度
2015/08/05 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
java解析XML详解
2021/07/09 Java/Android
Redis基本数据类型String常用操作命令
2022/06/01 Redis