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与javascript对多项选择的处理
Oct 09 PHP
如何给phpadmin一个保护
Oct 09 PHP
一段php加密解密的代码
Jul 16 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
PHP语法小结之基础和变量
Nov 22 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP三种方式实现链式操作详解
Jan 21 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 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程序的php代码
2008/04/07 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
给ECShop添加最新评论
2015/01/07 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
jQuery异步验证用户名是否存在示例代码
2014/05/21 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
win7安装python生成随机数代码分享
2013/12/27 Python
Python环境变量设置方法
2016/08/28 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python-接口开发入门解析
2019/08/01 Python
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
台湾东南旅游社网站:东南旅游
2019/02/11 全球购物
英国领先的电视购物零售商:Ideal World
2019/03/18 全球购物
医学院护理专业应届生求职信
2013/11/12 职场文书
学校消防安全制度
2014/01/30 职场文书
大学学风建设方案
2014/05/04 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
高老头读书笔记
2015/06/30 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python