liukaida 发表于 2017-3-29 14:10:05

php常见面试题目(编程篇)

  ~~文接前篇~~
  二.编程篇
  1. 写个函数来解决多线程同时读写一个文件的问题。

答:

<?php
function swritefile($filename,$writecontent,$openmode='w'){
if(@$fp=fopen($filename,$openmode)){
flock($fp,2);
fwrite($filename,$writecont);
fclose($fp);
return true;
}esle{
return false;
}
}
?>
   

2. 请写一个函数验证电子邮件的格式是否正确(要求使用正则)

答:

<?php
function emailCheck($str){
$valid = '/^[\w\-\.]+@[\w\-]+(\.[\w\-]+)+$/';
if(preg_match($valid, $str)){
echo 'ok';
}else{
echo 'no';
}
}
?>
   

3、写一个函数,可以遍历文件夹下的所有文件和文件夹。
  答:

<?php
function listDir($path){
if($handle = opendir($path)){
while(false !== ($file = readdir($handle))){
if($file != '.' && $file != '..'){
echo $file;
}
}
closedir($handle);
}
}
?>
   


4.    写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名

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

<?php
function getExtension1($url){
$a = explode("/",$url);
$c = explode("?",$a);
$b = explode(".",$c);
return $b;
}
function getExtension2($url){
$parse_url = parse_url($url);
$path = $parse_url['path'];
$pos = strrpos($path,'.');
return !$path || !$pos ? NULL : substr($path,$pos);
}
function getExtension3($p) {
$pos = strrpos($p,'.'); //strrpos()找出字元最后一次出现的位置
$ex = substr($p,$pos,4);
return $ex;
}
?>
   

5. 写出冒泡排序算法(要写出代码)操作数组。

答:

<?php
function maopao($arr) {
for($i=0; $i<count($arr); $i++){
for($j=$i+1; $j<count($arr); $j++){
if($arr[$i] > $arr[$j]){
$temp = $arr[$j];
$arr[$j] = $arr[$i];
$arr[$i] = $temp;
}
}
}
print_r($arr);
}
?>
   

6. 写个函数用来对二维数组排序。

答:

<?php
function array_sort_by_any_row($array_name, $row_id,$order_type){
$array_temp=array();
foreach($array_name as $key=>$value){
$array_temp[$key]=$value[$row_id];               
}
if($order_type==="ASC"){ //顺序
asort($array_temp);
} else{
arsort($array_temp);
}
$result_array=array();
foreach($array_temp as $key=>$value){
$result_array[$key]=$array_name[$key];   
}
return$result_array;   
}
$arr = array(array('num'=>5,'value'=>6),
array('num'=>2, 'value'=>39),
array('num'=>36, 'value'=>29)
);
$sortarr = array_sort_by_any_row($arr, 'num', 'DESC');
print_r($sortarr);
?>
   

7. 写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。

答:

<?php
$path = str_replace('\\', '/',__FILE__);
echo $path.'<br />';
function extname1($path) {
return strrchr($path, '.');
}
function extname2($path) {
$position =strrpos($path, '.');
return substr($path, $position);
}
function extname3($path) {
$arr =explode('.', $path);
return $arr;
}
function extname4($path) {
preg_match_all('/[\w\/\:\-]+\.([\w]+)$/', $path, $out);
return $out;
}
function extname5($path) {
return preg_replace('/^[^\.]+\.([\w]+)$/', '${1}', basename($path));
}
print_r(extname5($path));
?>
   

8.一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n,输出最后那个大王的编号。

答:

yuesefu(约瑟夫)环问题。
<?php
function yuesefu($n,$m) {
$r=0;
for($i=2;$i<=$n; $i++) {
$r=($r+$m)%$i;
}
return $r+1;
}
print_r(yuesefu(3,3));
?>
 
页: [1]
查看完整版本: php常见面试题目(编程篇)