page contents

PHP基本算法教程合集

PHP基本算法教程合集 二分查找(数组里查找某个元素) function bin_sch($array,  $low, $high, $k){       if ( $low <= $high){           $mid =  intval(($low+$high)/2 );        ...

attachments-2021-07-9fLjr8Of60dfcdfc69836.png

PHP基本算法教程合集

二分查找(数组里查找某个元素)

function bin_sch($array,  $low, $high, $k){   
    if ( $low <= $high){   
        $mid =  intval(($low+$high)/2 );   
        if ($array[$mid] ==  $k){   
            return $mid;   
        }elseif ( $k < $array[$mid]){   
            return  bin_sch($array, $low,  $mid-1, $k);   
        }else{   
            return  bin_sch($array, $mid+ 1, $high, $k);   
        }   
    }   
    return -1;   
}   

此方法针对索引数组并且value为从小到大进行排序

关联数组不适用、数组排序方式不一致或者无排序请相应修改if条件增加排序等

顺序查找(数组里查找某个元素)

function  seq_sch($array, $n,  $k){   
    $array[$n] =  $k;   
    for($i=0;  $i<$n; $i++){   
        if( $array[$i]==$k){   
            break;   
        }   
    }   
    if ($i<$n){   
        return  $i;   
    }else{   
        return -1;   
    }   
}   

此方法适用于索引数组并且$n = count($array);

简化增强版本

function  seq_sch($array, $k){   
    $y = $m = 'no'; 
    foreach($array as $i => $v){
        if($v == $k){  
            if($i == 'no'){$m = 'yes'}//防止key = no
            $y = $i; 
            break;   
        }   
    }   
    if ($y != 'no' || $m == 'yes'){   
        return  $y;   
    }else{   
        return -1;   
    }   

此方法适用于所有一维数组

线性表的删除(数组中实现)

function delete_array_element($array , $i){  
    $len = count($array);   
    for ($j=$i; $j<$len; $j++){  
            $array[$j] = $array [$j+1];  
    }  
    array_pop ($array);  
    return $array ;  
}  

$i指定删除参数位置

冒泡排序(数组排序)

function bubble_sort($array){  
    $count = count( $array);  
    if ($count <= 0 ) return false;  
    for($i=0 ; $i<$count; $i ++){  
        for($j=$count-1 ; $j>$i; $j--){  
            if ($array[$j] < $array [$j-1]){  
                //引用第三变量进项数组交换
                $tmp = $array[$j];  
                $array[$j] = $array[ $j-1];  
                $array [$j-1] = $tmp;  
             }  
         }  
     }  
     return $array;  
 }  

快速排序(数组排序)

function quick_sort($array ) {  
    if (count($array) <= 1) return  $array;  
    $key = $array [0];  
    $left_arr  = array();  
    $right_arr = array();  
    for ($i= 1; $i<count($array ); $i++){  
        if ($array[ $i] <= $key)  
            $left_arr [] = $array[$i];  
        else  
            $right_arr[] = $array[$i];  
    }  
    $left_arr = quick_sort($left_arr);  
    $right_arr = quick_sort($right_arr);  
    return array_merge($left_arr , array($key), $right_arr);  
}  

字符串长度

function strlen ($str){  
    if ($str == '' ) return 0;  
    $count =  0;  
    while (1){  
        if ($str[$count] != NULL){  
            $count++;  
            continue;  
        }else{  
            break;  
        }  
    }  
    return $count;  
  1. while (1) 其中1代表一个常量表达式,他永远不会等于0。所以,循环会一直执行下去。除非你设置break等类似的跳出循环语句循环才会中止
  2. $str[count] php是弱类型语言 使用下标可以读取到相应位置对应参数

截取子串

function substr($str, $start,  $length=NULL){  
    if ($str== '' || $start>strlen($str)) return;  
    if (($length!=NULL) && ($start>0) && ($length>strlen($str)-$start)) return;  
    if (($length!=NULL) && ($start<0) && ($length>strlen($str )+$start)) return;  
    if ($length == NULL) $length = (strlen($str) - $start);  
    if ($start < 0){  
            for ($i=(strlen($str)+$start); $i<(strlen ($str)+$start+$length ); $i++) {  
                 $substr .=  $str[$i];  
            }  
    }  
    if ($length > 0){  
            for ($i= $start; $i<($start+$length); $i++) {  
                  $substr .= $str[$i];  
            }  
    }  
    if ($length < 0){  
            for ($i =$start; $i<(strlen($str)+$length); $i++) {  
                   $substr .= $str[$i ];  
            }  
    }  
    return $substr;  
}

字符串翻转

function strrev($str){  
    if ($str == '') return 0 ;  
    for ($i=(strlen($str)- 1); $i>=0; $i --){  
            $rev_str .= $str[$i ];  
    }  
    return $rev_str;  
}  

字符串比较

function strcmp($s1, $s2){  
    if (strlen($s1) <  strlen($s2)) return -1 ;  
    if (strlen($s1) > strlen( $s2)) return 1;  
    for ($i=0; $i<strlen($s1); $i++){  
        if ($s1[$i] == $s2[$i]){  
            continue;  
        }else{  
            return false;  
        }  
    }  
    return  0;  
}  

查找字符串

function  strstr($str, $substr){  
    $m = strlen($str);  
    $n = strlen($substr);  
    if ($m < $n) return false ;  
    for($i=0; $i<=($m-$n+1); $i++){  
        $sub = substr($str, $i, $n);  
        if (strcmp($sub, $substr) ==  0)  return $i;  
    }  
    return false ;  

strcmp(sub,sub,substr)字符串比较方法 如果想不用比较方法请增加for循环

字符串替换

function str_replace($substr, $newsubstr, $str){  
    $m = strlen($str);  
    $n = strlen($substr);  
    $x = strlen($newsubstr);  
    if (strchr($str, $substr) == false) return false;
    $str_new = $str  
    for ($i=0; $i<=($m-$n+1); $i++){  
        $i = strchr($str, $substr);  
        $str = str_delete($str_new, $i, $n);  
        $str = str_insert($str_new, $i, $newstr);  
    }  
    return $str_new;  

strchr() 函数搜索字符串在另一字符串中的第一次出现。

该函数是 strstr() 函数的别名。

插入一段字符串

function str_insert($str, $i , $substr) {  
    for($j=0 ; $j<$i; $j++){  
            $startstr .= $str[$j];  
    }  
    for ($j=$i; $j <strlen($str); $j++){  
            $laststr .= $str[$j ];  
    }  
    $str = $startstr.$substr.$laststr;  
    return $str ;  
}  

删除一段字符串

function str_delete($str, $i, $j){  
    for ( $c=0; $c<$i; $c++){  
        $startstr .= $str [$c];  
    }  
    for ($c=( $i+$j); $c<strlen ($str); $c++){  
        $laststr .= $str[$c];  
    }  
    $str = $startstr.$laststr;  
    return $str;  
}

复制字符串

function strcpy($s1, $s2){  
    if (strlen($s1)==NULL || !isset($s2)) return;  
    for ($i=0; $i<strlen($s1); $i++){  
        $s2[] = $s1[$i];  
    }  
    return $s2;  

连接字符串

function strcat($s1 ,$s2){  
    if (!isset($s1) || !isset( $s2)) return;  
    $newstr = $s1 ;  
    for($i=0; $i<strlen($s2); $i++){  
            $newstr .= $s2[$i];  
    }  
    return $newstr;  

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

  • 发表于 2021-07-03 10:45
  • 阅读 ( 495 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章