操作文件
1.使用5种以上的方式获取一个文件的扩展名
要求: dir/upload.image.jpg, 找出.jpg或者jpg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<?php /** * 五种方式获取指定路径的文件扩展名 */ $str = "dir/upload.image.jpg" ; function one ( $str ) { $arr = explode ( '.' , $str ); $count = count ( $arr ); return $arr [ $count - 1]; } function two ( $str ) { $len = strlen ( $str ); for ( $i = $len - 1, $name = '' ; $str [ $i ] != '.' ; $i --) { $name .= $str [ $i ]; } $name = strrev ( $name ); return $name ; } function three( $str ) { $path = pathinfo ( $str ); return $path [ 'extension' ]; } function four( $str ) { $arr = explode ( '.' , $str ); return array_pop ( $arr ); } function five( $str ) { $start = strrpos ( $str , '.' ); return substr ( $str , $start + 1); } echo one( $str ); echo "<br>" ; echo two( $str ); echo "<br>" ; echo three( $str ); echo "<br>" ; echo four( $str ); echo "<br>" ; echo five( $str ); echo "<br>" ; |
2.写一个php函数算出两个文件的相对路径。例如$a="/a/b/c/d/e.php"; $b="/a/b/12/34/c.php",B相对于A的相对路径是什么?
这道题目可以看成是求第一个公共节点的题目,网上流传的代码大部分是错的,考虑不周全,当然我这个也只是用“../”去表示,没用"./"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<?php /** * 求$b相对于$a的相对路径 * @param string $a * @param string $b * @return string */ function getRelativePath ( $a , $b ) { $patha = explode ( '/' , $a ); $pathb = explode ( '/' , $b ); $counta = count ( $patha ) - 1; $countb = count ( $pathb ) - 1; $path = "../" ; if ( $countb > $counta ) { while ( $countb > $counta ) { $path .= "../" ; $countb --; } } // 寻找第一个公共结点 for ( $i = $countb - 1; $i >= 0;) { if ( $patha [ $i ] != $pathb [ $i ]) { $path .= "../" ; $i --; } else { // 判断是否为真正的第一个公共结点,防止出现子目录重名情况 for ( $j = $i - 1, $flag = 1; $j >= 0; $j --) { if ( $patha [ $j ] == $pathb [ $j ]) { continue ; } else { $flag = 0; break ; } } if ( $flag ) break ; else $i ++; } } for ( $i += 1; $i <= $counta ; $i ++) { $path .= $patha [ $i ] . "/" ; } return $path ; } $a = "/a/c/d/e.php" ; $b = "/a/c.php" ; $path = getRelativePath( $a , $b ); echo $path ; |
算法
1.使用PHP描述冒泡排序和快速排序,对象可以是一个数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
<?php /** * 冒泡排序算法实现(从小到大) */ function maopaoSort (& $array ) { $count = count ( $array ); for ( $i = 0; $i < $count - 1; $i ++) { for ( $j = 0; $j < $count - $i - 1; $j ++) { if ( $array [ $j ] > $array [ $j + 1]) { $tmp = $array [ $j ]; $array [ $j ] = $array [ $j + 1]; $array [ $j + 1] = $tmp ; } } } } /** * 快速排序 */ function pivotParation (& $array , $start , $end ) { $stand = $array [ $start ]; while ( $start < $end ) { while ( $start < $end && $array [ $end ] >= $stand ) { $end --; } if ( $start < $end ) { $array [ $start ++] = $array [ $end ]; } while ( $start < $end && $array [ $start ] <= $stand ) { $start ++; } if ( $start < $end ) { $array [ $end --] = $array [ $start ]; } } $array [ $start ] = $stand ; return $start ; } function quickSort (& $array , $begin , $end ) { if ( $begin < $end ) { $pivot = pivotParation( $array , $begin , $end ); quickSort( $array , $begin , $pivot - 1); quickSort( $array , $pivot + 1, $end ); } } $arr = array ( 5, 1, 3, 2, 19, 11, 25, 12, 100, 10000, 12 ); // 冒泡排序 maopaoSort( $arr ); print_r( $arr ); echo "<br>" ; // 快速排序 $count = count ( $arr ); quickSort( $arr , 0, $count - 1); print_r( $arr ); |
2.使用php描述顺序查找和二分查找
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?php /** * 顺序查找 */ function seqSearch ( $arr , $needle ) { for ( $i = 0, $len = count ( $arr ); $i < $len ; $i ++) { if ( $arr [ $i ] == $needle ) { return $i ; } } return - 1; } /** * 二分查找 */ function midSearch ( $arr , $start , $end , $needle ) { while ( $start <= $end ) { $mid = (int)( $start + ( $end - $start ) / 2); // 防止超出整数表示范围 if ( $arr [ $mid ] == $needle ) { return $mid ; } else if ( $arr [ $mid ] > $needle ) { $end = $mid - 1; } else { $start = $mid + 1; } } return - 1; } $arr = array ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ); $needle = 5; echo seqSearch( $arr , $needle ); echo "<br>" ; echo midSearch( $arr , 0, count ( $arr ) - 1, $needle ); |
3.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/** * Description:获取中枢点的位置 * * @param array $array * @param int $left * @param int $right * @param string $field * @return int */ function fetchArrayPivot (& $array , $left , $right , $field ) { // 基准定义 $stand = $array [ $left ]; // 遍历数组 while ( $left < $right ) { while ( $left < $right && $array [ $right ][ $field ] >= $stand [ $field ]) { $right --; } if ( $left < $right ) { $array [ $left ++] = $array [ $right ]; } while ( $left < $right && $array [ $left ][ $field ] <= $stand [ $field ]) { $left ++; } if ( $left < $right ) { $array [ $right --] = $array [ $left ]; } } // 获取中枢点位置 $array [ $left ] = $stand ; return $left ; } /** * Description:快速排序主程序 * * @param array $array * @param int $begin * @param int $end * @param string $field */ function quickSort (& $array , $begin , $end , $field ) { // 变量定义 $pivot = null; if ( $begin < $end ) { $pivot = fetchArrayPivot( $array , $begin , $end , $field ); quickSort( $array , $begin , $pivot - 1, $field ); quickSort( $array , $pivot + 1, $end , $field ); } } |
利用快排的思想,增加一个field参数