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