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程序--记数器
Oct 09 PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
php基于协程实现异步的方法分析
Jul 17 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微信开发之查询城市天气
2016/06/23 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
jquery表单对象属性过滤选择器实例分析
2015/05/18 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
jQuery实现表格元素动态创建功能
2017/01/09 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
2020/05/21 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[34:44]Liquid vs TNC Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python计算书页码的统计数字问题实例
2014/09/26 Python
Python3里的super()和__class__使用介绍
2015/04/23 Python
python开发之str.format()用法实例分析
2016/02/22 Python
对Python _取log的几种方式小结
2019/07/25 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
关于毕业的广播稿
2014/01/10 职场文书
爱与责任演讲稿
2014/05/20 职场文书