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

来源:互联网 发布:用友nc java插件下载 编辑:程序博客网 时间:2024/06/03 14:17
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');//结果:'htmlecho "<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
原创粉丝点击