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作的文本留言本的例子(三)
Oct 09 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
php的大小写敏感问题整理
Dec 29 PHP
解析在zend Farmework下如何创立一个FORM表单
Jun 28 PHP
PHP使用in_array函数检查数组中是否存在某个值
Mar 25 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
Dec 29 PHP
必须收藏的php实用代码片段
Feb 02 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 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
WHOIS类的修改版
2006/10/09 PHP
怎样在php中使用PDF文档功能
2006/10/09 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
javascript表单正则应用
2017/02/04 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
用Python实现KNN分类算法
2017/12/22 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
什么是Web Service?
2012/07/25 面试题
计算机毕业大学生推荐信
2013/12/01 职场文书
煤矿班组长岗位职责
2013/12/29 职场文书
物业经理自我鉴定
2014/03/03 职场文书
个人作风建设总结
2014/10/23 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
创业计划书之养殖业
2019/10/11 职场文书