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字符串分割函数explode的实例代码
Feb 07 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
基于session_unset与session_destroy的区别详解
Jun 03 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
ThinkPHP发送邮件示例代码
Oct 08 PHP
php封装的smarty类完整实例
Oct 19 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
Nov 25 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 PHP
php libevent 功能与使用方法详解
Mar 04 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/06/25 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
iOS10推送通知开发教程
2016/09/19 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
python比较两个列表是否相等的方法
2015/07/28 Python
python开发之tkinter实现图形随鼠标移动的方法
2015/11/11 Python
代码详解django中数据库设置
2019/01/28 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python返回数组的索引实例
2019/11/28 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
计算机专业个人简短的自我评价
2013/10/23 职场文书
银行内勤岗位职责
2014/04/09 职场文书
母校寄语大全
2014/04/10 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
初婚初育证明范本
2015/06/18 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang