第三十三套

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

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

function getExt($url){
   $arr = parse_url($url);
   $file = basename($arr['path']);
   $ext = explode(".",$file);
   return $ext[1];
}

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

方法一.

$count = 3;
echo test($s,$count);
function test($s='',$count=3){
    if(empty($s) || $count <= 0){
        return false;
    }
    //反转
    $str = strrev($s);
    //分割
    $arr = str_split($str,$count);
    //连接
    $new_s = join(',',$arr);
    //再次反转
    return strrev($new_s);
}

方法二

$str = '1234567890';
$arr = array();
$c = strrev($str);
for ($i=0; $i < ceil(strlen($c)/3); $i++) { 
    $arr[] = substr($c,$i*3,3);
}
echo strrev(implode(',',$arr));

3.写一个函数,算出两个文件的相对路径

如:
$a=’/a/b/c/d/e.php’
$b=’/a/b/12/34/c.php’
计算出$b相对于$a的相对路径应该是../../c/d
$na=explode('/',$a); 
$nb=explode('/',$b); 
$numa=count($na); 
$numb=count($nb); 
$max=$numa>$numb?$numa:$numb; 
for($i=0;$i<$max-1;$i++){ 
    if($na[$i]!=$nb[$i]){ 
        $up.='../'; 
        $path.=$na[$i]."/"; 
    }} 
echo $relpath=$up.$path; 

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

要求:
1不要使用qsort等系统内置排序函数。
2请使用你认为最快最优的方式实现该函数并使排序的复杂度最低

$arr = array(
    array('id'=>'3','score'=>90),
    array('id'=>'5','score'=>13),
    array('id'=>'8','score'=>23),
    array('id'=>'32','score'=>87),
    array('id'=>'79','score'=>34),
    array('id'=>'39','score'=>83),
    array('id'=>'93','score'=>82),
    array('id'=>'82','score'=>81),
    array('id'=>'45','score'=>84),
    );
function bubbleSort($numbers) {
    $cnt = count($numbers);
    for ($i = 0; $i < $cnt; $i++) {
        for ($j = 0; $j < $cnt - $i - 1; $j++) {
            if ($numbers[$j]['score'] > $numbers[$j + 1]['score']) {
                $temp = $numbers[$j];
                $numbers[$j] = $numbers[$j + 1];
                $numbers[$j + 1] = $temp;
            }
        }
    }

    return $numbers;
}

echo "
";
print_r(bubbleSort($arr));

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

CREATE 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

你可能感兴趣的:(PHP-面试题总集)