php面试题集-基础程序题

基础程序题


用PHP打印出前一天的时间格式是2006-5-10 22:21:21
date(‘Y-m-d H:i:s‘, strtotime(‘-1 day‘));

如何实现字符串翻转?
方法一:
<?php
function reverse($var) {
  $res = "";
  for($i = 0, $j = strlen($var);$i<$j;$i++) {
    $res = $var[$i].$res;
  }
  return $res;
}
$tmpvar = "wofang";
$res = reverse($tmpvar);
echo $res;
?>
方法二:
<?php echo strrev("Hello world!"); // outputs "!dlrow olleH" ?>

写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
<?php
/**
 * 遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。 
 * @param string $dir 
 * @return array 
 */
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] = rec_scandir( $dir . ‘/‘ . $file );
                } else {
                    $files[] = $file;
                }
            }
        }
        closedir( $handle );
        return $files;
    }
}
?>

请写一个函数验证电子邮件的格式是否正确 
<?php
function checkEmail( $email ) {
    $preg = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
    return preg_match( $preg, $email );
}
?>

有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
方法一(对于php5及更高版本):
<?php
$readcontents = fopen(‘http://www.phpers.com/index.html‘);
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
?>
方法二:
<?php echo file_get_contents(‘http://www.phpers.com/index.html‘); ?>

如何得到当前执行脚本路径,包括所得到参数。
说明:例如有一个脚本 www.domain.com, 传给他的参数有参数1,参数2,参数3….传递参数的方法有可能是GET有可能是POST, 
那么现在请写出类似http://www.domain.com/script.php? 参数1=值1&参数2=值2..... 的结果
暂无答案

写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个一维数组。
(提示:不能使用系统已有函数,另外请仔细回忆以前学习过的基础知识)
<?php
/**
 * 排序类
 */
class Sort {
    /*
     * 冒泡排序 小到大
     */
    public function bubble_sort( $array ) {
        $count = count( $array );
        if ( $count <= 0 )
            return false;
        for ( $i = 0; $i < $count; $i++ ) {
            for ( $j = 1; $j <= $count - $i - 1; $j++ ) {
                if ( $array[$j] < $array[$j - 1] ) {
                    $tmp = $array[$j];
                    $array[$j] = $array[$j - 1];
                    $array[$j - 1] = $tmp;
                }
            }
        }
        return $array;
    }


    /**
     * 快速排序
     */
    public function quick_sort( $arr ) {
        $len = count( $arr );
        if ( $len <= 1 )
            return $arr;
        $key = $arr[0];
        $left_arr = $right_arr = array();
        for ( $i = 1; $i < $len; $i++ ) {
            if ( $arr[$i] <= $key )
                $left_arr[] = $arr[$i];
            else
                $right_arr[] = $arr[$i];
        }
        $left_arr = $this->quick_sort( $left_arr );
        $right_arr = $this->quick_sort( $right_arr );
        return array_merge( $left_arr, array( $key ), $right_arr );
    }


    /**
     *  希尔排序
     */
    public function shell_sort( $datas ) {
        //分组  
        for ( $increment = count( $datas ) / 2; $increment > 0; $increment = $increment / 2 ) {
            //每个组内排序  
            for ( $i = $increment; $i < count( $datas ); $i++ ) {
                $temp = $datas[$i];
                $j = 0;
                for ( $j = $i; $j >= $increment; $j = $j - $increment ) {
                    if ( $temp < $datas[$j - $increment] ) {
                        $datas[$j] = $datas[$j - $increment];
                    } else {
                        break;
                    }
                }
                $datas[$j] = $temp;
            }
        }
        return $datas;
    }
}
?> 

有一表 menu(mainmenu, submenu, url), 请用递归法写出一树形菜单,将所有的menu列出来。
暂无答案

给你三个数,写程序求出其最大值。
暂无答案

有一数组 $a=array(4,3,8,9,2);请将其重新排序,按从小到大的顺序列出。
暂无答案

写出匹配邮箱地址和URL的两个正则表达式。类似下面的:
邮箱地址:[email protected]
URL地址:http://www.example.cpm.cn/user_profile.php?uid=100
(提示:使用标准的正则表达式,就是php中preg_*类的正则处理函数能够解析的正则)
邮箱:/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
URL:/^http:\/\/[\w]+\.[\w]+[\S]*/

用php写一段代码,实现不使用第3个变量,交换$a、$b的值,$a、$b的初始值自己定。
<?php
    $a = 1;
    $b = 2;
    list($b, $a) = array($a, $b);
?> 

写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案1:
<?php
function getExt($url){
  $arr = parse_url($url);
  $file = basename($arr[‘path‘]);
  $ext = explode(".", $file);
  return $ext[1];
}
?>  
答案2:
<?php
function getExt($url) {
 $url = basename($url);
 $pos1 = strpos($url, ".");
 $pos2 = strpos($url, "?");
 if(strstr($url, "?")){
   return substr($url, $pos1 + 1, $pos2 - $pos1 - 1);
 } else {
   return substr($url, $pos1);
 }
}
?>  

写一个函数,算出两个文件的相对路径
如 $a = ‘/a/b/c/d/e.php‘;
   $b = ‘/a/b/12/34/c.php‘; 
   计算出 $b 相对于 $a 的相对路径应该是 ../../c/d
<?php
   function getRelativePath( $a, $b ) {
       $returnPath = array( dirname( $b ) );
       $arrA = explode( ‘/‘, $a );
       $arrB = explode( ‘/‘, $returnPath[0] );
       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 );
   }
   echo getRelativePath( $a, $b );
?> 


php面试题集-基础程序题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。