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实现下载限制速度示例分享
Feb 13 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
PHP使用ffmpeg给视频增加字幕显示的方法
Mar 12 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
递归实现php数组转xml的代码分享
May 14 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 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正则匹配汉字的方法介绍
2013/04/25 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
详解PHP数组赋值方法
2015/11/07 PHP
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
详解NODEJS的http实现
2018/01/04 NodeJs
js实现橱窗展示效果
2020/01/11 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
利用Python实现kNN算法的代码
2019/08/16 Python
python 将Excel转Word的示例
2021/03/02 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
员工培训心得体会
2013/12/30 职场文书
国企干部对照检查材料
2014/08/22 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2014年办公室文秘工作总结
2014/12/09 职场文书
党支部承诺书
2015/01/20 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
Pandas 稀疏数据结构的实现
2021/07/25 Python
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js