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 和 MySQL 时区的一点总结
Mar 26 PHP
很好用的PHP数据库类
May 27 PHP
php中Smarty模板初体验
Aug 08 PHP
php 中英文语言转换类代码
Aug 11 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
Nov 18 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 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里的JS打印函数
2006/10/09 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
浅谈php提交form表单
2015/07/01 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
javascript基于DOM实现省市级联下拉框的方法
2015/05/14 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
微信小程序全局变量功能与用法详解
2019/01/22 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
python实现端口转发器的方法
2015/03/13 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
基于python的docx模块处理word和WPS的docx格式文件方式
2020/02/13 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
Keras自定义IOU方式
2020/06/10 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
露营世界:Camping World
2017/02/02 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
研究生自荐信
2013/10/09 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript