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截取中文字符串的问题
Jul 12 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
Dec 20 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 PHP
Yaf框架封装的MySQL数据库操作示例
Mar 06 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
javascript常用函数(2)
2015/11/05 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python实现滑雪游戏
2020/02/22 Python
联想中国官方商城:Lenovo China
2017/10/18 全球购物
基层干部十八大感言
2014/01/19 职场文书
《长城》教学反思
2014/02/14 职场文书
初中班级口号
2014/06/09 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
八年级英语教学计划
2015/01/23 职场文书
网上祭英烈活动总结
2015/02/04 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs
GPU服务器的多用户配置方法
2022/07/07 Servers