几个php算法题-----其中有的还没搞明白

echo "<br/>------------PHP翻转中文字符串------------------<br/>";
function reverse($str){
    $r = array();
    //echo mb_strlen($str);//28=16+12
    for($i=0; $i<mb_strlen($str); $i++){
        $r[] = mb_substr($str, $i, 1, 'UTF-8');
    }
    return implode(array_reverse($r));
}
echo reverse('www.phpha.com天涯PHP博客');

echo "<br/>-------------PHP计算URL的文件后缀名-----------------<br/>";
function getext($url){
    $data = parse_url($url);
    //print_r($data);
    //Array ( [scheme] => http [host] => blog.phpha.com [path] => /archives/1670.html [query] => id=1670 )
    $path = $data['path'];
    $info = pathinfo($path);
    //print_r($info);
    //Array ( [dirname] => /archives [basename] => 1670.html [extension] => html [filename] => 1670 )
    return $info['extension'];
}
echo getext('http://blog.phpha.com/archives/1670.html?id=1670');
//结果:'html

echo "<br/>-------------获取2个文件夹的相对路径-----------------<br/>";
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/5.php';
echo getrpath($a , $b)."<br/>";
echo getrpath($b , $a);
//结果:'../../../c/d/e.php';
function getrpath($path, $conpath){
    $pathArr = explode('/', $path);
    $conpathArr = explode('/', $conpath);
    $dismatchlen = 0;
    for($i=0; $i<count($pathArr); $i++){
        if($conpathArr[$i] != $pathArr[$i]){
            $dismatchlen = count($pathArr) - $i;
            $arrleft = array_slice($pathArr, $i);//array_slice() 函数在数组中根据条件取出一段值
            break;//终止循环;
        }
    }
    return str_repeat('../', $dismatchlen).implode('/', $arrleft);
}

echo "<br/>-------------array_slice-----------------<br/>";
/*
若length有给予且是正数,将会取回length个元素,
若length是负数,则会停止于数组末端处第length个元素,
若省略此参数,则传回的部份将会从offset直到数组的末端。
 */
   $input = array("a", "b", "c", "d", "e"); 

   $output = array_slice($input, 2);      // returns "c", "d", and "e"
    print_r($output);

   $output = array_slice($input, 2, -1);  // returns "c", "d" 
    print_r($output);

   $output = array_slice($input, -2, 1);  // returns "d" 
    print_r($output);

   $output = array_slice($input, 0, 3);   // returns "a", "b", and "c" 
    print_r($output);

echo "<br/>--------------遍历文件夹下的所有文件--------readdir到底怎么用法??--------<br/>";
function finddir($dir){
    $files = array();
    if(is_dir($dir)){
        if($handle = opendir($dir)){
            while(($file = readdir($handle)) !== false){//???
                //echo $file;
 //estonian.langfinnish.langfrench.langgreek.langhungarian.langitalian.langmodules...lang_dir
                if($file != '.' && $file != '..'){
                    if(is_dir(rtrim($dir, '/').'/'.$file)){
                        $files[$file] = finddir(rtrim($dir, '/').'/'.$file);
                    }else{
                        $files[] = rtrim($dir, '/').'/'.$file;
                    }
                }
            }
            closedir($handle);
        }
    }
    return $files;
}
print_r(finddir('E:/wamp/lang'));






echo "<br/>------------归并排序-------???-----------<br/>";
function Merge(&$arr, $left, $mid, $right) {
  $i = $left;
  $j = $mid + 1;
  $k = 0;
  $temp = array();
  while ($i <= $mid && $j <= $right)
  {
    if ($arr[$i] <= $arr[$j]) 
      $temp[$k++] = $arr[$i++];
    else
      $temp[$k++] = $arr[$j++];
  }
  while ($i <= $mid)
    $temp[$k++] = $arr[$i++];
  while ($j <= $right)
    $temp[$k++] = $arr[$j++];
  for ($i = $left, $j = 0; $i <= $right; $i++, $j++)
    $arr[$i] = $temp[$j];
}
  
function MergeSort(&$arr, $left, $right)
{
  if ($left < $right)
  {
    $mid = floor(($left + $right) / 2);
    MergeSort($arr, $left, $mid);
    MergeSort($arr, $mid + 1, $right);
    Merge($arr, $left, $mid, $right);
  }
}
//$arr=array(3,4,1,33,453,23,11);
//MergeSort($arr,1,453);








echo "<br/>-------------冒泡排序-----------------<br/>";

function button_sort($arr){
    $count = count($arr);
    for ($i=0; $i < $count-1; $i++) {
        for ($j=$i+1; $j < $count; $j++) { 
            if ($arr[$i]>$arr[$j]) {
                $temp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $temp;
            }
        }
    }
    return $arr;
}
$arr=array(3,4,1,33,453,23,11);
//print_r(button_sort($arr));

echo "<br/>-------------快速排序-----------------<br/>";
function quick_sort($arr) {
    $n=count($arr);
    if($n<=1)
        return $arr;
    $key=$arr[0];
    $left_arr=array();
    $right_arr=array();
    for($i=1;$i<$n;$i++) {
        if($arr[$i]<=$key)//注意这里是<= 
            $left_arr[]=$arr[$i];
        else
            $right_arr[]=$arr[$i];
    }
    $left_arr=quick_sort($left_arr);//回调函数;
    $right_arr=quick_sort($right_arr);
    return array_merge($left_arr,array($key),$right_arr);//不需要回调后多次拼接;
    //注意是array($k),需要一个数组,单独一个$key不为数组;
}
$arr=array(3,4,1,33,453,23,11);

var_dump(quick_sort($arr));
echo "<br/>------------选择排序------------------<br/>";
/*i=0,把0后面所有数组找出最小的赋值给arr[k],替换,再一次次循环*/
function select_sort($arr) {
    $n=count($arr);
    for($i=0;$i<$n;$i++) {
        $k=$i;
        for($j=$i+1;$j<$n;$j++) {
           if($arr[$j]<$arr[$k])
               $k=$j;
        }
        if($k!=$i) {
            $temp=$arr[$i];
            $arr[$i]=$arr[$k];
            $arr[$k]=$temp;
        }
    }
    return $arr;
}
$arr=array(3,4,1,33,453,23,11);
var_dump(select_sort($arr));
echo "<br/>----------插入排序--------------------<br/>";
/*第0和第1个比较,从小到大排列
第1 0个和第2个比较,返回从小到大排列
第2 1 0个和第3个比较,返回从小到大排列;*/
function insertSort($arr) {
    $n=count($arr);
    for($i=1;$i<$n;$i++) {
        $tmp=$arr[$i];
        $j=$i-1;
        while($arr[$j]>$tmp) {
            $arr[$j+1]=$arr[$j];
            $arr[$j]=$tmp;
            $j--;//j--后如果>=0,返回while中继续判断执行
            if($j<0)
                break; 
        }
    }
    return $arr; 
}
$arr=array(3,4,1,33,453,23,11);
var_dump(insertSort($arr));

echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------------------------<br/>";
echo "<br/>------------我的练习------------------<br/>";
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/5.php';
echo my_getrpath($a , $b)."<br/>";
function my_getrpath($apath,$bpath){
    $apathArr = explode('/',$apath);
    $bpathArr = explode('/',$bpath);
    $dismatchlen = 0;
    for ($i=0; $i < count($apathArr); $i++) { 
        if ($apathArr[$i] != $bpathArr[$i]) {
            $dismatchlen = count($apathArr) - $i;
            $arrleft = array_slice($apathArr,$i);
            break;
        }
    }
    return str_repeat('../',$dismatchlen).implode('/',$arrleft);

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值