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);
}
?>
几个php算法题-----其中有的还没搞明白
最新推荐文章于 2020-11-15 00:19:34 发布