将心比心,方得人心~

php常见面试题(上)

周洲 2017-04-07 10:44:06

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


打赏

『微信打赏』

Tag标签php 

上一篇: php面试题目

下一篇: PHP经典面试题

我是有底线的