/**
* 第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() 函数删除数组中的最后一个元素
}
}