欢迎光临
感谢一路有你

转载 | PHP面试题汇总

百度CDN jquery引用包:https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js

新浪 CDN jquery引用包:http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js

 

 

   

 

 

一、前端 2

HTML 2

CSS 2

JavaScript 3

二、PHP基础: 3

(一)、PHP基础 3

(二)、面向对象部分 21

(三)、smarty 模板引擎 24

(四)、二次开发系统(DEDE、ecshop): 27

(五)、框架 29

三、数据库部分 32

SQL语言 35

MySQL 36

php操作数据库 40

四、微信公众平台开发 44

五、其它 46

 

 

 

一、前端

1、说一下你所掌握的网页前端技术有哪些?

熟练掌握DIV+CSS网页布局,javascript,JQuery框架、BootStrap框架、photoshop图片处理

 

HTML

 

2、XML与HTML的主要区别

(1)XML是区分大小写字母的,HTML不区分。

(2)在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束标记。在XML中,绝对不能省略掉结束标记。

(3)在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/字符作为结尾。这样分析器就知道不用查找结束标记了。

(4)在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。

(5)在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

 

3、什么是HTML5?

HTML5是最新的HTML标准,他的主要目标是提供所有内容而不需要任何的像flash,silverlight等的额外插件,这些内容来自动画,视频,富GUI等

HTML5是万维网联盟(W3C)和网络超文本应用技术工作组(WHATWG)之间合作制定的

 

4、HTML5中canvas是什么?SVG是什么?有什么区别?

Canvas和SVG是HTML5中主要的2D图形技术,前者提供画布标签和绘制API,后者是一整套独立的矢量图形语言

SVG是一种矢量图格式,Canvas是基于位图的图像

Canvas是使用JavaScript程序绘图(动态生成),SVG是使用XML文档描述来绘图。

 

 

CSS

 

 

 

 

JavaScript

5、★JS表单弹出对话框函数是?获得输入焦点函数是?

弹出对话框:alert(),prompt(),confirm()

获得输入焦点focus()

 

6、★JS的转向函数是什么?怎么引入一个外部JS文件?

location.replace()

location.href  //问的是函数不是属性

 

<script type=”text/javascript” src=”js/js_function.js”></script>

 

7、★如何不使用 submit 按钮来提交表单?

如果我们不想用 submit 按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码:

<a href=”javascript: document.myform.submit ();”>Submit Me</a>

 

8、AJAX的优势是什么?

ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验

 

 

、PHP基础:

(一)、PHP基础

9、php的意思

PHP 全称:Hypertext Preprocessor——超文本预处理程序

php是基于服务端来创建动态网站的脚本语言,可以用php和HTML生成网页

10、PHP语言的一大优势是跨平台,什么是跨平台?

PHP的运行环境最优搭配为Apache+mysql+PHP,此运行环境可以在不同操作系统(例如windows、linux等)上配置,不受操作系统的限制,所以叫跨平台

11、Print、echo、print_r有什么区别?

① echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出 echo 会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用。

② print   是打印字符串③ print_r 则是打印复合类型  如数组 对象

12、请问 PHP中echo和print有什么区别?

echo 和 print 之间的差异:

l echo – 能够输出一个以上的字符串

l print – 只能输出一个字符串,并始终返回 1

echo 比 print 稍快,因为它不返回任何值。

13、WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式?

Get与post两种方式

区别:1. Get从服务器获取数据,post向服务器传送数据

  1. Get传值在url中可见,post在url中不可见
  2. 3. Get传值一般在2KB以内,post传值大小可以在ini中进行设置
  3. 4. get安全性非低,post安全性较高,get执行效率却比post 高

建议:1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式;

2、做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式;

百度使用的get方式,因为可以从它的URL中看出

14、SESSION与COOKIE区别是什么?

①存储位置:session存储于服务器,cookie存储于浏览器客户端

②安全性:session安全性比cookie高

③session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用

 

15、PHP处理数组的常用函数?(重点看函数的‘参数’和‘返回值’)

①array() 创建数组;②count() 返回数组中元素的数目;

③array_push()将一个或多个元素插入数组的末尾(入栈);

④array_column() 返回输入数组中某个单一列的值;

⑤array_combine()通过合并两个数组来创建一个新数组;

⑥array_reverse() 以相反的顺序返回数组;

⑦array_unique() 删除数组中的重复值;⑧in_array()检查数组中是否存在指定的值;

 

16、数组函数arsort 的作用是__; 

arsort:对数组进行逆向排序并保持索引关系

 

17、PHP处理字符串的常用函数?(重点看函数的‘参数’和‘返回值’)

①trim() 移除字符串两侧的空白字符和其他字符;

②substr_replace()把字符串的一部分替换为另一个字符串;

③substr_count() 计算子串在字符串中出现的次数;④substr()返回字符串的一部分;

⑤strtolower() 把字符串转换为小写字母;⑥strtoupper() 把字符串转换为大写字母;

⑦strtr() 转换字符串中特定的字符;⑧strrchr()查找字符串在另一个字符串中最后一次出现;

⑨strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);strrev()反转字符串;strlen()返回字符串的长度;str_replace()替换字符串中的一些字符(对大小写敏感);print()输出一个或多个字符串;explode()把字符串打散为数组;is_string() 检测变量是否是字符串;strip_tags()从一个字符串中去除HTML标签;mb_substr()用来截中文与英文的函数

 

18、★ 如何实现字符串翻转?

strrev( ) 函数;

 

19、★、实现中文字串截取无乱码的方法(3分)

mb_substr函数

<?php

str=’程序之家’; echo mb_substr(str,0,2,’utf-8′); //截取头2个字,编码为utf-8

?>

结果显示:程序

 

20、★、请将数组$arr=array(“james”,”torn”,”symfony”);的值用”,”号分隔并合并成字符串输出

echo implode(“,”,arr);  或者  join( ‘,’  ,  arr );

21、★ PHP格式化日期的函数是?

date()

22、★★  用PHP打印出前一天的时间格式是2006-4-10 12:21:21?   重点:★ 

echo date(‘Y-m-d H:i:s’,   strtotime(‘-1 days’));

23、PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)

date_default_timezone_get() 返回默认时区。

date_default_timezone_set() 设置默认时区。

date() 格式化本地时间/日期。

getdate() 返回日期/时间信息。

gettimeofday() 返回当前时间信息。

microtime() 返回当前时间的微秒数。

mktime() 返回一个日期的 Unix 时间戳。

strtotime() 将任何英文文本的日期或时间描述解析为 Unix 时间戳。

time() 返回当前时间的 Unix 时间戳。

24、PHP操作文件的常用函数?(重点看函数的‘参数’和‘返回值’)

①打开文件fopen();②unlink()删除文件;③读取文件fread();

④写入文件fwrite() file_put_contents() ;⑤修改文件权限chmod();⑥关闭文件fclose();⑦创建文件file_get_contents()

25、PHP操作目录(文件夹)的常用函数?(重点看函数的‘参数’和‘返回值’)

①opendir()打开目录;②rmdir()删除目录;

③读取目录readdir() scandir();④mkdir()创建目录;

⑤修改目录chroot();⑥关闭目录closedir()

26、★ php哪个函数可以打开一个文件,以对文件进行读和写操作?

fopen()

27、如何在 PHP 中定义常量?

PHP 中使用 define () 来定义常量,define (“Newconstant”, 30);

28、用PHP写出显示客户端IP与服务器IP的代码

打印客户端IP:echo _SERVER[“REMOTE_ADDR”];       或者:getenv(“REMOTE_ADDR”); 打印服务器端IP:echo _SERVER[“SERVER_ADDR”];

echo gethostbyname(“www.baidu.com”);

 

29、★在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量中;而链接到当前页面的URL记录在预定义变量中

echo _SERVER[‘PHP_SELF’]; echo _SERVER[“HTTP_REFERER”];

//本页地址,SCRIPT_NAME也可以:php/test.php

echo _SERVER[‘PHP_SELF’];   //链接到当前页面的前一页面的URL地址: echo _SERVER[“HTTP_REFERER”];

 

//前执行脚本的绝对路径名D:lnetpub/www/root/phptest.php

echo _SERVER[“SCRIPT_FILENAME”];   //正在浏览当前页面用户的IP地址127.0.0.1 echo  _SERVER[“REMOTE_ADDR”];

//查询(query)的字符串(URL中的第一个问号?之后的内容):id=1&bi=2

echo _SERVER[“QUERY_STRING”]; //当前运行脚本所在的文档根目录:d:inetpubwwwroot echo _SERVER[“DOCUMENT_root”];

 

30、在php中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量

_SERVER[“PHP_SELF”]__中;而链接到当前页面的URL记录在预定义变量_SERVER[“HTTP_REFERER”]__中

 

31、执行程序段<?php echo 8%(-2)?>将输出__0__.

 

32、★ 语句include和require的区别是什么?为避免多次包含同意文件,可用(?)语句代替它们?

require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

include->include有返回值,而require没有(可能因为如此require的速度比include快)

注意:包含文件安不存在或者语法错误的时候require是致命的,include不是

关于这道题当家可以看看课件了,上课的时候讲的很细了。

 

33、★ foo()和@foo()之间有什么区别?

@foo()控制错误输出

 

34、★ 在PHP中error_reporting这个函数有什么作用? 

设置错误级别与错误信息回报

 

35、PHP 中的错误类型有哪些?

PHP 中遇到的错误类型大致有3类。

l 提示:这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。

l 警告:这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。

l 错误:这是真正的严重错误,比如访问不存在的 PHP 类。

 

36、★ 如何声明一个名为“myclass”的没有方法和属性的类?

class myclass{}

object=new myclass();newstr=object->test;object->test=”info”;

 

37、★ GD库是做什么用的?

GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。

在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

 

38、PHP 中获取图像尺寸大小的方法是什么?

getimagesize () 获取图片的尺寸

Imagesx () 获取图片的宽度

Imagesy () 获取图片的高度

 

39、PHP 中的 PEAR 是什么?

PEAR 也就是为 PHP 扩展与应用库(PHP Extension and Application Repository),它是一个 PHP 扩展及应用的一个代码仓库。

 

40、★  指出一些在PHP输入一段HTML代码的办法。

echo  “<a href=’index.php’>aaa</a>”;

 

41、★下面哪个选项没有将 john 添加到users 数组中?有问题?

(a)users[]=‘join’; (b)array_add(users,’john’);

(c)array_push(users,’john’); (d)users||=’john’;

【b,d】

 

42、★下面的程序会输入10否?

<?php

num=10; function multiply(){num=num*10; } multiply(); echo num;

?>

 

输出:10

 

43、★写出以下程序的输出结果

b=201;c=40;

a=b>c?4:5; echo a;

?>

4

 

44、★检测一个变量是否有设置的函数是否?是否为空的函数是?

isset(str),empty(str);

45、★、a=’abcdef’;请取出a的值并打印出第一个字母(1分)

echo a[0] 或 echo substr(a,0,1)

46、★、使用那些工具进行版本控制?(1分)

CVS,SVN,Git

CVS Server on Apache作服务端,WinCVS作客户端

Subversion on Apache/DAV做服务端,   TortoiseSVN做客户

 

47、★、如何实现PHP、JSP交互

$foo=new Java(‘java.lang.System’);

48、★、请简单阐述您最得意的开发之作(4分)看作品  简单说明

信息分类

 

49、★、看题说结果 考察基础

null=NULL;bool=FALSE;

notSet;array=array();

//以下是问题

a=”hello”;b=&a; unset(b);

echo a; //答案为:hello 堆栈问题 echo “


“;b=”world”;

echo a; //答案为:hello b 已经销毁了

echo “<hr>”;

 

50、★、看题说结果

a=1;x=&a;b=a++; echo b;//答案为:1

echo “<hr>”;

//以下是问题

x = empty(array);

echo x;//答案为:1  返回布尔类型 echo “


“; echo x?”true”:”false”;//答案为:true

 

51、★、写出如下程序的输出结果

<?php

str1=null;str2=false;

echo str1==str2 ? ‘相等’ : ‘不相等’;

//相等

 

str3=”;str4=0;

echo str3==str4?  ‘相等’ : ‘不相等’;

//相等

 

str5=0;str6=’0′;

echo str5===str6? ‘相等’ : ‘不相等’;

 

//不相等

?>

 

52、★、写出如下程序的输出结果

<?

a1=null;a2=false;

a3=0;a4=”;

a5=’0′;a6=’null’;

a7=array();a8=array(array());

echo empty(a1)? ‘true’:’false’; //true echo empty(a2)? ‘true’:’false’; //true

echo empty(a3)? ‘true’:’false’; //true echo empty(a4)? ‘true’:’false’; //true

echo empty(a5)? ‘true’:’false’; //true echo empty(a6)? ‘true’:’false’; //false

echo empty(a7)? ‘true’:’false’; //true echo empty(a8)? ‘true’:’false’; //false

?>

 

53、★、写出如下程序的输出结果

test=”aaaaaa”;abc=&test; unset(test);

echo abc;//’aaaaaa’   54、★、写出如下程序的输出结果  这道题挺难啊 GLOBALS[‘var1’]=5;

var2=1; function get_value(){ global var2;

var1=0; return var2++;

}

get_value();  //大家注意 这没要返回值

echo var1;   //5 echo var2;   //2

?>

注: 在php5.2可以 php5.4错误

 

55、★、写出如下程序的输出结果

 

function get_arr(arr){ unset(arr[0]);

}

 

arr1=array(1,2);arr2=array(1,2);

get_arr(&arr1); // 5.2才可以 get_arr(arr2);

 

print_r( count(arr1) ); print_r( count(arr2) );

 

 

56、★、PHP代码如下

a=”hello”;b=&a; unset(b);

b=”world”; echo a;

其结果是?  //hello

 

57、

$str=”cd”;

str=”landog”;str=”ok”;

echo $cd;

其结果是?   ok

 

58、★、在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句

<META http-equiv=”Content-Type”    content=”text/html; charset=gbk”    >

<META http-equiv=”Content-Type”    content=”text/html; charset=utf-8”    >

请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5

请注意:

 

(1) 需要处理完整的 html 页面,即不光此 meta 语句

(2) 忽略大小写

(3) ‘ 和 ” 在此处是可以互换的

(4) ‘Content-Type’ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk’ 两侧的不行

(5) 注意处理多余空格

解析:这里全面考察正则表达式匹配。

 

(1) 需要处理完整的 html 页面,即不光此 meta 语句  ==》 preg_replace()

(2) 忽略大小写   ==> i修饰符

(3) ‘ 和 ” 在此处是可以互换的   ==》多选结构  【“|‘】

(4) ‘Content-Type’ 两侧的引号是可以忽略的,但 ‘text/html; charset=gbk’ 两侧的不行    ==》可选结构  ’?

(5) 处理多余的空格   \s?表示0到多处空白

 

综合,我们得到的测试代码如下:(未经测试 :b )

 

function chgCharSet(url){string = file_get_contents(url);patten = ‘/(<meta\s*http-equiv\s*=\s*([\’|”]?)content-type\2\s*content\s*=\s*([\’|”])text\/html\s*;\s*charset=)([\w\-]+)(\3\s*>)/i’;

return preg_replace(patten,”1″.”big5″.”5″,string);

}

 

url = “http://www.baidu.com”; echo chgCharSet(url);

 

59、★、如何修改SESSION的生存时间

方法1:将php.ini中的session.gc_maxlifetime设置为9999 重启 apache

方法2:savePath=”./session_save_dir/”;lifeTime=小时 *  秒;

session_save_path(savePath); session_set_cookie_params(lifeTime);

session_start();

方法3:setcookie() and session_set_cookie_params($lifeTime);

大家最好答第一点

 

60、★、有一个网页地址,比如PHP开发资源主页: http://www.phpres.com/index.php,如何得到它的内容?

方法1(对于PHP5及更高版本):

readcontents=fopen(“http://www.phpres.com/index.php”,”rb”);contents=stream_get_contents(readcontents); fclose(readcontents);

echo $contents;

方法2: 我们讲过的 就答它吧!

echo file_get_contents(“http://www.phpres.com/index.php”);

 

61、★、在PHP中, heredoc 是一种特殊的字符串,它的结束标志必须?

heredoc 的语法是用”<<<”加上自己定义成对的标签,在标签范围内的文字视为一个字符串

例子:

 

str=<<str;

 

 

62、★、请说明php中传值与传引用的区别。 什么时候传值什么时候穿引用?

传值只是把某一个变量的值传给了另一个变量,而引用则说明两者指向了同一个地方。[对函数的参数而言]

按值传递:函数范围内对值得任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php 必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。

按引用传递则不需要复制值,对于性能提高很有好处。

 

63、★、 简述如何得到当前执行脚本路径,不包括所得到参数。

script_name=basename(__FILE__); print_(script_name);

 

大家想一想 如果包括参数呢?

<?php

echo

“http://”._SERVER[‘SERVER_NAME’]._SERVER[‘PHP_SELF’].”?”._SERVER[‘QUERY_STRING’]; //echo “http://”._SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URL’;

?>

 

64、★、如何使用下面的类,并解释下面什么意思?(3)

class test{

function Get_test(num){num=md5( md5 (num).”En”); return num;

}

}

 

testnum=”123″;object = new test();

encrypt = object->Get_test(testnum); echo encrypt;

类test里面包含Get_test方法,实例化类调用方法多字符串加密

__________________________________________________________________

65、★、用PHP写一段代码,实现不使用第3个变量,交换a、b的值,a、b的初始值自己定。

a = “abcd”;b = “1324”;

echo “初始化时 a= a, b=b<br>”;

a = a.b;b = strlen (b);b = substr (a,0,(strlen(a)-b));a = substr (a,strlen(b));

echo “交换后 a=a,b=b<br>”;

 

66、★ 写一个函数,尽可能高效的,从一个标准url 里取出文件的扩展名。重点题型

例如:http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php

答案:1:function getExt(url){arr=parse_url(url); //以数组的形式得到url的各个段的信息file=basename(arr[“path”]);//得到的是文件名 脚本名 直接用会得到查询字符串所以需要配置parse_urlext=explode(“.”,file); return ext[1];

}

答案2:

function getExt(url){url=basename(url);pos1=strops(url,”.”);pos2=strops(url,”?”); if(strstr(url,”?”)){

return substr(url,pos1+1,pos2-pos1-1);

}else{

return substr(url,pos1);

}

}

67、、写一个函数,算出两个文件的相对路径

如 a=”/a/b/c/d/e.php”;b=”/a/b/12/34/c.php”;

计算出b相对于a的相对路径应该是../../c/d将()添上

答案: function getRelativePath(a,b){

returnPath=array(dirname(b));

arrA=explode(“/”,a);

arrB=xeplode(“/”,returnPath[10]);

for(n=1, len=count(arrB) ;n<len ;n++ ){

if(arrA[n]!=arrB[n]){

break;

}

}

if(len-n>0){

returnPath=array_merge(returnPath,array_fill(1,len-n,”..”));

}

returnPath=array_merge(returnPath,array_slice(arrA,n));

return implode(“/”,$returnPath);

}

 

68、、有一个一维数组,里面存储整形数据,请写一个函数,将他们从小到大的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用PHP函数)

<?php

function BubbleSort(&arr){cnt=count(arr);flag=1;

for(i=0 ;i<cnt ;i++ ){

if(flag==0){ return; }flag=0;

for(j=0 ;j<cnt-i-1 ;j++ ){ if(arr[j]>aarr[j+1]){tmp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=tmp;flag=1;

}

}

}

}

test=array(1,3,6,8,2,7); BubbleSort(test);

var_dump($test);

?>

 

69、、写一个函数,能够遍历一个文件夹下的所有文件夹和子文件夹。

 

function my_scandir(dir) {files=array();

if(handle=opendir(dir)){

}

 

while((file=readdir(handle))!==false){

if(file!=”..”&&file!=”.”){

if(is_dir(dir.”/”.file)){

files[file]=scandir(dir.”/”.file);

}else{

files[]=files;

}

}

}

closedir(handle); return files;

}

}

function my_scandir(dir) {files=array();

if(is_dir(dir)) { if(handle=opendir(dir)) { while((file=readdir(handle))!==false) { if(file!=”.” && file!=”..”) { if(is_dir(dir.”/”.file)) {files[file]=my_scandir(dir.”/”.file); } else {files[]=dir.”/”.files;

}

}

}

closedir(handle); return files;

}

}

}

print_r(my_scandir(“D:Program Fileslnternat ExplorerMUI”))

?>

70、 简述论坛中无限分类的实现原理。

<?php

/*

数据表结构如下:

CREATE TABLE’category'(

‘categoryID’smallint(5)unsigned NOT NULL auto_increment,

‘categoryParentlID’ smallint(5)unsigned NOT NULL default”0″,

‘categoryName’varchar(50) NOT NULL default””,

PRIMARY KEY(‘categoryID’)

)ENGINE=MYISAM DEFAULT CHARSET CHARSET=gbk;

INSERT INTO’category'(‘categoryParentlID’,’categoryName’)VALUES

(0,”一级级别”),

(1,”二级级别”),

(1,”二级级别”),

(1,”二级级别”),

(2,”三级级别”),

(2,”333332″),

(2,”124234″),

(3,”aqqqqqd”),

(4,”哈哈”),

(5,”663333666″),

*/

//指定分类id变量category_id,然后返回该分类的所有子类 //default_category为默认的选中的分类

function Get_Category(category_id=0,level=0,default_category=0) { global DB;

sql=”SELECT*FROM category OIRDER BY categoryID DESC”;restult=DB->query(sql);

while(rows=DB->fetch_array(result)) {category_array[row[categoryParentlID]][categoryID]  =  array(“id”  =>row[categoryID],”parent”=> row[categoryParentlID],”name”=>row

[categoryName]);

 

}

if(!isset( category_array[ category_id]))

{

return “”;

}

foreach(category_array[ category_id]AS key=>category)

}

if(category[“id”]==dafault_category)

{

echo “<option selected value=”.category[“id”].””; } else { echo “category[“id”].””;

}

if(level>0) { echo “>”.str_repeat(“”,level).””.category[“name”].”/n”; } else { echo “>”.category[“name”].”</option>/n”;

}

Get_Category(key,level+1,dafault_category); } unset(category_array[category_id]); } /* 函数返回的数组格式如下所示: Array( [1]=>Array( [id]=> 1 [name]=> 一级类别  [level]=> 0 [ParentID]=> 0 ) [4]=>Array( [id]=> 4 [name]=> 二级类别  [level]=> 1 [ParentID]=> 1 ) [9]=>Array( [id]=> 9 [name]=>   哈哈     [level]=> 2 [ParentID]=> 4 ) [3]=>Array( [id]=> 3 [name]=> 二级类别  [level]=> 1 [ParentID]=> 1 ) [8]=>Array( [id]=> 8 [name]=> aqqqqqd [level]=> 2 [ParentID]=> 3 ) [2]=>Array( [id]=> 2 [name]=> 一级类别  [level]=> 1 [ParentID]=> 1 ) [7]=>Array( [id]=> 7 [name]=> 2323233  [level]=> 2 [ParentID]=> 2 ) [6]=>Array( [id]=> 6 [name]=> 3333333  [level]=> 2 [ParentID]=> 2 ) [5]=>Array( [id]=> 5 [name]=> 三级类别  [level]=> 2 [ParentID]=> 2 ) [10]=>Array( [id]=> 10 [name]=> 6666666  [level]=> 3 [ParentID]=> 5 ) ); */ //指定分类Id,然后返回数组 function Category_array(category_id=0,level=0) { global DB;

sql = “SELECT * FROM category ORDER BY categoryID DESC”;result = DB->query(sql);

while(rows = DB->fetch_array(result)) {category_array[rows[“category_ParentID”]][rows[“categoryID”]]= rows; } foreach(category_array AS key=>val)

{

if(key == category_id)

{

foreach(val AS =>v) {options[k]= array( “id”  => v[categoryID], “name” => v[“categoryName”], “level” => level, “ParentID”=>v[“categoryParentID”] );children = Category_array(k,level+1);

if(count(childern)>0) {option = options + children;

}

}

}

}

unset(category_array[category_id]);

return options;   } ?>     category_id=0,level = 0,default_category = 0)

{

echo category_id;arr = array(

“0”=> array(

“1” => array(“id”=>1,”parent”=>0,”name”=>”1111”),

“2” => array(“id”=>2,”parent”=>0,”name”=>”2222”),

“4” => array(“id”=>4,”parent”=>0,”name”=>”4444”)

),

“1”=> array(

“3” => array(“id”=>3,”parent”=>1,”name”=>”3333333”),

“5” => array(“id”=>5,”parent”=>1,”name”=>”5555555”)

),

“3”=> array(

“1” => array(“id”=>6,”parent”=>3,”name”=>”6666666”),

“2” => array(“id”=>7,”parent”=>3,”name”=>”7777777”)

),

“4”=> array(

“8” => array(“id”=>8,”parent”=>4,”name”=>”8888”),

“9” => array(“id”=>9,”parent”=>4,”name”=>”9999”)

),

);

if(!isset(arr[category_id]))

{

return “”;

}

foreach(arr[category_id] AS key =>cate)

{

if(cate[“id”] == default_category)

{

txt =”cate[“id”].””;

}else

{

txt = “cate[“id”].””;

}

if(level>0) {txt1 = “>”.str_repeat(“-“, level).””.cate[“name”].”</option>/n”;

}

else

{

txt1 = “>”.cate[“name”].”</option>/n”;

}

val = txt.txt1; echo val;

self::Get_Category(key,level+1,default_category); } } function getFlush(category_id=0,level=0,default_category=0)

{

ob_start();

self::Get_Category(category_id,level,default_category);out = ob_get_contents();

ob_end_clean();

return out; } }id =_GET[“id”]; echo “