操作文件
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参数