php笔试题(一)

选答题1、写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名

例如:

http://www.sina.com.cn/abc/def/fg.php?id=1取出php或.php(扩展名不仅限于php)

Parse_url

Function getsuffix($file){

$arr = parse_url($file);

$suffix = $arr[‘path’];

Return array_pop(explode(‘.’,$suffix));

}

 

或者

Function getsuffix($file){

$suffix = array_pop(explode(‘.’,$file));

Return array_shift(explode(‘?’,$suffix));

}

Pathinfo

Function getsuffix($file){

$suffix = pathinfo($file,PATHINFO_EXTENSION);

Return array_shift(explode(‘?’,$suffix));

}

 

选答题2、写一个函数,将一个字符串(如:1234567890),转换成(如1,234,567,890)每3位用逗号隔开的形式。

Number_format()

选答题3、写一个函数,算出两个文件的相对路径

如:

$a=’/a/b/c/d/e.php’

$b=’/a/b/12/34/c.php’

计算出$b相对于$a的相对路径应该是../../c/d

function relPath($a,$b){

$a = explode('/',trim(dirname($a),'/'));

$b = explode('/',trim(dirname($b),'/'));

$len = count($a)>count($b) ? count($a) : count($b);

for($i = 0;$i<$len;$i++){

if($a[$i] != $b[$i]){

$b[$i] = '../';

$rel .= $b[$i];

$path .= $a[$i].'/';

}

 

}

return rtrim($rel.$path,'/');

}

echo relPath('/a/b/c/d/e.php','/a/b/12/34/c.php');

 

必答题:

1、请用PHP设计一个函数,对学生英语考试得分从高到低排序,输入是所有学生的学号和考试得分,返回排好序的考试得分和对应学生的学好。考试满分为100,由于判卷要求,得分不会有小数

 

要求:

1不要使用qsort等系统内置排序函数。

2请使用你认为最快最优的方式实现该函数并使排序的复杂度最低

快速排序

<?php

       function quickSort($arr)

       {

           $len    = count($arr);

           if($len <= 1) {

               return $arr;

           }

           $key = $arr[0];

           $left_arr    = array();

           $right_arr    = array();

           

           for($i=1; $i<$len; $i++){

               if($arr[$i] <= $key){

                   $left_arr[] = $arr[$i];

               } else {

                   $right_arr[] = $arr[$i];

               }

           }

 

2、现在有一个Mysql数据库表payment记录用户购买订单,表结构如下:

TABLE payment(

id int unsigned AUTO_INCREMENT,

user_id int unsigned comment ‘用户id’,

quantity smallint unsigned comment ‘本次购买产品数量’,

pay_time timestamp comment ‘购买时间’,

PRIMARY KEY(id)

)

用户每访问成功付款一笔订单(从进入到离开),会增加一条记录,记录用户的ID(user_id),以及购买的产品数量。比如:

1、208,2 //208这个用户购买2个产品

Insert into payment (user_id,quantity)values(‘***’,’***’)

 

1)、请写出一个SQL语句挑出用户(id=100)最近购买的10条订单。

Select use_id,quantity,pay_time form payment where id=100 order by pay_time desc;

 

2)、请写一个SQL语句挑出用户(id=100)最近】购买的第10到第20条订单(共10个)

Select use_id,quantity,pay_time form payment where id=100 order by pay_time desc limit 10,10;

 

3)、请写出一个SQL语句挑出购买产品数最多的10个用户(user_id)和对应购买的产品总数。

Select use_id,sum(quantity) total,pay_time form payment group by use_id order by total desc limit 10;

 

2、请写一个SQL语句。输出购买产品数分别等于1,2,3,4,5,6,7,8,9,10的用户数量,如果某个数量对应的用户数为0,可以不输出。

Select count(id) from payment where quantity in (1,2,3,4,5.6,7,8,9,10) group by quantity

posted @ 2018-01-03 18:52  飞翔的超级大鸟  阅读(213)  评论(0编辑  收藏  举报