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语法(2)
Oct 09 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
php 正则匹配函数体
Aug 25 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
Aug 20 PHP
php递归遍历删除文件的方法
Apr 17 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
yii,CI,yaf框架+smarty模板使用方法
Dec 29 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
Yii2中简单的场景使用介绍
Jun 02 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 xml文件操作代码(一)
2009/03/20 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
深入理解PHP中的global
2014/08/19 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
htm调用JS代码
2007/03/15 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
JS的get和set使用示例
2014/02/20 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
解决python 输出是省略号的问题
2018/04/19 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python获取地震信息 微信实时推送
2019/06/18 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
Order by的几种用法
2013/06/16 面试题
仓库管理制度
2014/01/21 职场文书
委托书模板
2014/04/04 职场文书
校运动会广播稿300字
2014/10/07 职场文书
工作检讨书怎么写
2015/01/23 职场文书
检讨书格式范文
2015/05/07 职场文书
小学大队委竞选口号
2015/12/25 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
instantclient客户端 连接oracle数据库
2022/04/26 Oracle
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python