A5下载 - 努力做内容最丰富最安全的下载站!

A5站长下载站

当前位置:A5下载 > 编程开发 > 网站开发 > PHP的文件操作与算法实现的面试题示例

PHP的文件操作与算法实现的面试题示例

时间:2015-08-10 17:15作者:yezheng人气:41

 操作文件
1.使用5种以上的方式获取一个文件的扩展名
要求: dir/upload.image.jpg, 找出.jpg或者jpg

<?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的相对路径是什么?
这道题目可以看成是求第一个公共节点的题目,网上流传的代码大部分是错的,考虑不周全,当然我这个也只是用“../”去表示,没用"./"

<?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描述冒泡排序和快速排序,对象可以是一个数组

<?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描述顺序查找和二分查找

<?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内置函数

/**

* 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参数

标签PHP,文件,操作,算法,实现,试题,示例,操作,文件,使用

相关下载

查看所有评论+

网友评论

网友
您的评论需要经过审核才能显示

公众号