/** * 第26题:递归循环某目录下的子目录及文件并输出 */ function tree($dir,$level=1){ $fh=opendir($dir);//打开目录 while($dirname=readdir($fh)){//循环读取当前目录下的子目录及文件 if($dirname == '.' || $dirname == '..'){ continue; } echo "|".str_repeat('-',$level).$dirname;//目录名或文件名,str_repeat("|-",$num);//把字符串重复指定的次数 echo '<br>'; if(is_dir($dir. '/' .$dirname)){//如果是目录,则递归调用 tree($dir. '/' .$dirname,$level+2); } } } tree('D:/wamp/www/discuz3/source/'); /** * 第27题:交换数组中的键和值 */ $a=array( 0=>"Dog", 1=>"Cat", 2=>"Horse" ); echo "<pre>"; print_r(array_flip($a)); /** * 经array_flip()数组函数处理后的结果: * Array( * [Dog] => 0 * [Cat] => 1 * [Horse] => 2 * ) */ /** * 第28题:删除数组中最后一个元素 */ $a=array("Dog","Cat","Horse"); array_pop($a); echo "<pre>";print_r($a); /** * 经array_pop()数组函数处理后的结果: * Array( * [0] => Dog * [1] => Cat * ) */ /** * 第29题:array_push()函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度 */ $a=array("Dog","Cat"); $b=array("Horse","Bird"); $num=array_push($a,$b);//结果:3 echo "<pre>";print_r($a); /** * 经array_push()数组函数处理后的结果: * Array( * [0] => Dog * [1] => Cat * [2] => Array * ( * [0] => Horse * [1] => Bird * ) * ) */ /** * 第30题:array_rand() 函数从数组中随机选出一个或多个元素,并返回 * 注意: * (1)如果只选取一个元素,那么返回选定该元素的键名 * (2)如果不止选取一个元素,则返回包含随机键名的数组 */ $a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse"); echo "<pre>";print_r(array_rand($a,2)); /** * 经array_rand()数组函数处理后的结果: * Array( * [0] => b * [1] => c * ) */ /** * 第31题:array_shift()将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变 */ $stack = array( array("admin","123"), array("admin1","123"), array("admin2","123"), array("admin3","123") ); $fruit = array_shift($stack); echo "<pre>";print_r($fruit); echo "<pre>";print_r($stack); /** * 经array_shift()数组函数处理后的结果: * Array( * [0] => admin * [1] => 123 * ) * Array( * [0] => Array( * [0] => admin1 * [1] => 123 * ) * [1] => Array( * [0] => admin2 * [1] => 123 * ) * [2] => Array( * [0] => admin3 * [1] => 123 * ) * ) */ /** * 第32题:array_unshift() 函数在数组开头插入一个或多个元素 */ $stack = array( array("admin1","123"), array("admin2","123"), array("admin3","123") ); $num = array_unshift($stack,array("admin","123"));//返回数组元素个数 echo "<pre>";print_r($stack); /** * 经array_unshift()数组函数处理后的结果: * Array( * [0] => Array ( [0] => admin [1] => 123 ) * [1] => Array( * [0] => admin1 * [1] => 123 * ) * [2] => Array( * [0] => admin2 * [1] => 123 * ) * [3] => Array( * [0] => admin3 * [1] => 123 * ) * ) */ /** * 第33题:PHP排序函数汇总 * 总结: * (1)arsort():按照数组键值对数组进行desc逆向排序并保持索引关系 * (2)asort() :按照数组键值对数组进行asc排序并保持索引关系 * (3)krsort():按照数组键名对数组进行desc逆向排序并保持索引关系 * (4)ksort() :按照数组键名对数组进行asc排序并保持索引关系 * * (5)sort()/rsort() :按照数组键值对数组进行asc或desc排序,本函数为数组中的单元赋予新的键名,原有的键名将被删除 * */ /** * 第34题:reset()及 end() 使用 * */ $stack = array( array("admin1","123"), array("admin2","123"), array("admin3","123") ); echo "<pre>";print_r(reset($stack)); /** * 经reset()数组函数处理后的结果: * Array( * [0] => admin1 * [1] => 123 * ) */ echo "<pre>";print_r(end($stack)); /** * 经end()数组函数处理后的结果: * Array( * [0] => admin3 * [1] => 123 * ) */ /** * 第35题:crypt()及 md5() 单向加密函数的使用 * */ echo crypt("123","v1pin")."<br/>"; echo crypt("admin","v1pin")."<br/>"; echo md5("admin"); /** * 第36题:parse_str() 函数把查询字符串解析到变量中 * */ parse_str("id=23&name=John%20Adams"); echo $id."<br />";//23 echo $name."<br/>";//John Adams parse_str("id=23&name=John%20Adams",$arr); echo "<pre>";print_r($arr); /** * 经parse_str()数组函数处理后的结果: * * Array( * [id] => 23 * [name] => John Adams * ) */ //第37题:写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名,例如:/abc/de/fg.php?id=1 需要取出 php 或 .php $url = "http://www.baidu.com/abc/de/fg.php?id=1"; /** * parse_url($url):解析$url,并以关联数组形式返回url信息 * * Array( * [scheme] => http * [host] => www.baidu.com * [path] => /abc/de/fg.php * [query] => id=1 * ) */ $path = parse_url($url); echo "<pre>";print_r($path); /** * pathinfo() 函数以关联数组的形式返回文件路径的信息 * * print_r(pathinfo($path['path']));//输入结果如下: * Array( * [dirname] => /abc/de 等价于 dirname($path['path']); * [basename] => fg.php 等价于 basename($path['path']); * [extension] => php * [filename] => fg * ) */ echo "<pre>"; print_r(pathinfo($path['path'])); echo pathinfo($path['path'],PATHINFO_DIRNAME)."<br/>"; //结果:"/abc/de" PATHINFO_DIRNAME - 只返回 dirname echo pathinfo($path['path'],PATHINFO_BASENAME)."<br/>"; //结果:"fg.php" PATHINFO_BASENAME - 只返回 basename echo pathinfo($path['path'],PATHINFO_EXTENSION)."<br/>";//结果:"php" PATHINFO_EXTENSION - 只返回 extension echo dirname($path['path'])."<br/>"; //结果:"/abc/de" echo basename($path['path'])."<br/>"; //结果:"fg.php" $url = "http://www.baidu.com/abc/de/fg.php?id=1"; echo basename($url)."<br/>";//结果:"fg.php?id=1" echo strripos(basename($url),"?")."<br/>";//结果:6 strripos()-左边开始,字符最后一次出现的位置 echo substr(basename($url),0,strripos(basename($url),"?"))."<br/>";//结果:"fg.php" /** * 第38题:在HTTP 1.0中,状态码 401 的含义是();如果返回“找不到文件”的提示,则可用 header 函数,其语句为()。 * * 答:未授权, * header("HTTP/1.0 404 Not Found"); */ /** * 第39题:开启php.ini文件中的safe_mode选项,会影响到哪些函数的应用?至少说出四个 * * 答:主要影响文件操作类函数、程序执行类函数 等等 * 如:pathinfo()、basename()、fopen()、exec() 等等 */ /** * 第40题:简述POST和GET传输的最大容量是多少? * * (1)答:GET方法传递数据,控制在1MB之内,POST方法传输数据没有大小限制 * * (2)解析:GET方法提交的表单数据被附加到URL上,并作为URL的一部分发送到服务器端。URL的长度应限制在1MB字符以内。如果发送的数据量太大,数据将被截断,从而导致意外或失败的处理结果; * POST方法不依赖于URL,不会将传递的参数值显示在地址栏中。另外,POST方法可以没有限制的向服务器端传递数据,所有提交的信息在后台传输,用户在浏览器端是看不到这一过程的,安全性高; */ /** * 第41题:如何通过form表单控制上传文件的大小? * * (1)答:在form表单中,通过隐藏域MAX_FILE_SIZE控制上传文件的大小,它必须放在文件域之前才能够起作用。 * * (2)解析:在客户端控制上传文件,应用的form表单中的enctype和method属性,以及隐藏域 MAX_FILE_SIZE * enctype="multipart/form-data" //指定表单编码数据方式 * method="post" //指定数据的传输方式 * <input type="hidden" name="MAX_FILE_SIZE" value="10000" /> //通过隐藏域控制上传文件的大小(单位为字节),该值不能超过php.ini配置文件中 upload_max_filesize 选项设置的值 */ /** * 第42题:用最简单的代码编写一个获取三个数字中最大值的函数 */ echo max(30,5,25);//结果:30 /** * 第43题:如何将 1234567890 转换成 1,234,567,890 每三位用逗号隔开的形式? */ echo number_format("1234567890")."<br/>"; //结果:1,234,567,890 默认以逗号作为分隔符 echo number_format("1234567890",2)."<br/>"; //结果:1,234,567,890.00 参数2-指定小数位数 echo number_format("1234567890",2,",",".")."<br/>"; //结果:1.234.567.890,00 参数2-指定小数位数 参数3-规定替代小数点符号的字符串 参数4-规定用作千位分隔符的字符串 /** * 第44题:如何尽可能高效的从标准URL中取得文件名 */ $url = "http://www.baidu.com/abc/de/fg.php?id=1"; echo basename($url)."<br/>";//结果:"fg.php?id=1" echo strripos(basename($url),"?")."<br/>";//结果:6 strripos()-左边开始,字符最后一次出现的位置 echo substr(basename($url),0,strripos(basename($url),"?"))."<br/>";//结果:"fg.php" echo substr("fg.php?id=1",0,6);//结果:"fg.php" 参数3-截取的字符长度 /** * 第45题:stripos()、strpos()、strripos()、strrpos() 字符串函数的区别? * * (1)stripos():返回字符串在另一字符串中第一次出现的位置(大小写不敏感) * (2)strpos() :返回字符串在另一字符串中首次出现的位置(对大小写敏感) * (3)strripos():查找字符串在另一字符串中最后出现的位置(对大小写不敏感) * (4)strrpos():查找字符串在另一字符串中最后出现的位置(对大小写敏感) */ /** * 第46题:请写一个函数,实现以下功能:字符串"open_door" 转换成 "OpenDoor"、"make_by_id" 转换成 "MakeById" */ function str_change($str) { $str = str_replace ( "_", " ", $str ); $str = ucwords ($str); $str = str_replace(" ","",$str); return $str; } echo str_change("open_door")."<br/>";//结果:"OpenDoor" echo str_change("make_by_id")."<br/>";//结果:"MakeById" function str_change1($str) { $str_arr = explode("_", $str ); foreach($str_arr as $key => $val){ $str_arr[$key] = ucwords ($val); } return implode("",$str_arr); } echo str_change1("open_door")."<br/>";//结果:"OpenDoor" echo str_change1("make_by_id")."<br/>";//结果:"MakeById" echo $str1=implode("",array_map(function($val){return ucwords($val);},explode("_","open_door")));//结果:"OpenDoor",提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组 echo $str2=implode("",array_map(function($val){return ucwords($val);},explode("_","make_by_id")));//结果:"MakeById",提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组 echo $str3=implode("",array_map('ucwords',explode("_","open_door")));//结果:"OpenDoor",提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组 echo $str4=implode("",array_map('ucwords',explode("_","make_by_id")));//结果:"MakeById" ,提示:回调函数要有返回值;array_map()返回用户自定义函数作用后的数组 $arr1=explode("_","open_door");$flag=@array_walk($arr1,'ucwords');echo implode("",$arr1);//结果:"OpenDoor",提示:回调函数没有返回值;array_walk()对数组中每个元素使用回调函数,返回bool值 $arr2=explode("_","make_by_id");$flag=@array_walk($arr2,'ucwords');echo implode("",$arr2);//结果:"MakeById",提示:回调函数没有返回值;array_walk()对数组中每个元素使用回调函数,返回bool值 /** * 第47题:求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数 */ echo (strtotime("2007-3-6")-strtotime("2007-2-5"))/(3600*24);//结果:29 天 /** * 第48题:如何用php的环境变量得到一个网页地址的内容? * 如:"http://www.baidu.com/index.php?id=10" */ echo $_SERVER['REQUEST_URI'];//结果:"/index.php?id=10" /** * 第49题:array_map() 和 array_walk() 数组函数的区别? * array_map() 返回用户自定义函数作用后的数组 * array_walk() 对数组中每个函数使用回调函数,返回bool值 */ $array = array('AAA', 'bbb'); $map_array = array_map('strtolower', $array); /** * 输出结果: * Array( * [0] => aaa * [1] => bbb * ) */ print_r($map_array); /** * 输出结果: * Array( * [0] => AAA * [1] => BBB * ) */ print_r($array); //如果回调函数需要直接作用于数组中的值,可以将回调函数的第一个参数指定为引用:&$value function array_walk_func(&$v, $k){ $v = strtolower($v); } $walk_array = array_walk($array, 'array_walk_func'); /** * 输出结果:1 */ print_r($walk_array); /** * 输出结果: * Array( * [0] => aaa * [1] => bbb * ) */ print_r($array); /** *第50题:如何使用php实现双向队列? */ class Deque{ public $queue; public function __construct(){//构造函数,创建一个数组 $this->queue = array(); } public function addFirst($item){//array_unshift() 函数在数组开头插入一个或多个元素。 return array_unshift($this->queue , $item); } public function removeFirst(){ return array_shift($this->queue);//PHP array_shift() 函数删除数组中的第一个元素 } public function addLast($item){//给数组末尾追加元素,无指定下标,默认为数字 return array_push($this->queue , $item); } public function removeLast(){ return array_pop($this->queue);//PHP array_pop() 函数删除数组中的最后一个元素 } }