网络编程 
首页 > 网络编程 > 浏览文章

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

(编辑:jimmy 日期: 2024/5/20 浏览:3 次 )

操作文件

1.使用5种以上的方式获取一个文件的扩展名

要求: dir/upload.image.jpg, 找出.jpg或者jpg

  <"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的相对路径是什么?

这道题目可以看成是求第一个公共节点的题目,网上流传的代码大部分是错的,考虑不周全,当然我这个也只是用“../”去表示,没用"./"

 

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

  <"<br>"; 
   
  // 快速排序 
  $count = count($arr); 
  quickSort($arr, 0, $count - 1); 
  print_r($arr); 

2.使用php描述顺序查找和二分查找

  <"<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生成二维码
下一篇:PHP的关于变量和日期处理的一些面试题目整理
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网