热门文章
PHP函数介...
如何解决Red...
MySQL数据...
Tomcat 与 N...
Nginx 轻松搞...
Nginx额外篇...
Nginx静态资...
ThinkPHP...
PHP 微服务...
linux-window...

PHP常见算法合集

有趣的灵魂 2023-03-21 15:09:12

一、文件夹遍历

php
function allFile($path = __DIR__, $level = 1){
   if (is_dir($path) && is_readable($path)) {
     if($pd = opendir($path)) {
      while (($file = readdir($pd)) !== false) {
         if($file != '.' && $file != '..') {
          if (($subPath = $path . DIRECTORY_SEPARATOR . $file) && is_dir($subPath)){
             echo "<pre />";
             echo '<span style="color: red;font-weight:bold;">' . str_repeat("--", $level) . $subPath . '</span>';
             self::allFile($subPath, $level++);                    
           }else{
             echo "<pre />";
             echo str_repeat("--", $level) . $subPath;
           }                
       }            
     }        
   }    
  }else{
     echo "{$path} is not a available dir";
  }
}


二、九九乘法表

<?php
  function create(){
   for ($i = 1; $i <= 9; $i++) {
     for ($j = 1; $j <= $i; $j++) {
      echo $j . '*' . $i . '=' . $i * $j . PHP_EOL;        
     }        echo "<br />";    
   }
  }

三、无限极递归分类

①、递归算法

<?php
  function getTree($array, $pid =0, $level = 0){
   //声明静态数组,避免递归调用时,多次声明导致数组覆盖    
   static $list = [];
   foreach ($array as $key => $value) {
     //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
     if ($value['pid'] == $pid) {
       //父节点为根节点的节点,级别为0,也就是第一级
       $value['level'] = $level;
       //把数组放到list中            
       $list[] = $value;            
       //把这个节点从数组中移除,减少后续递归内存消耗            
       unset($array[$key]);            
       //递归调用            
       getTree($array, $value['id'], $level+1);        
      }    
    }    
    return $list;
  }

②、引用算法

<?php
   function getTree($array){
       //第一步 构造数据    
       $items = [];    
       foreach($array as $value) {        
            $items[$value['id']] = $value;    
       }     
       //第二部 遍历数据 生成树状结构    
       $tree = [];    
       foreach($items as $key => $value) {        
              if(isset($items[$item['pid']])) {            
              $items[$item['pid']]['son'][] = &$items[$key];        
              } else {            
                        $tree[] = &$items[$key];        
                  }    
               }    return $tree;
       }

四、冒泡排序

<?php
    function bubbleSort($arr){    
         $len = count($arr);    
         for($i=1; $i<$len; $i++) {        
             for($k=0; $k<$len-$i; $k++) {            
                 if($arr[$k] > $arr[$k+1]) {                
                    $tmp=$arr[$k+1];                
                    $arr[$k+1]=$arr[$k];                
                    $arr[$k]=$tmp;            
                  }        
               }    
            }    
           return $arr;
       }

五、选择排序

<?php 
   function selectSort($arr){    
        $len=count($arr);    
        for($i=0; $i<$len-1; $i++) {        
              $p = $i;        
              for($j=$i+1; $j<$len; $j++) {            
                   if($arr[$p] > $arr[$j]) {                
                         $p = $j;            
                   }        
               }        
               if($p != $i) {            
                   $tmp = $arr[$p];            
                   $arr[$p] = $arr[$i];            
                   $arr[$i] = $tmp;        
                }    
          }    
          return $arr;
      }

六、插入排序

<?php
    function insertSort($arr){    
             $len=count($arr);    
             for($i=1; $i<$len; $i++) {        
                    $tmp = $arr[$i];        
                    for($j=$i-1;$j>=0;$j--) {            
                         if($tmp < $arr[$j]) {                
                               $arr[$j+1] = $arr[$j];                
                               $arr[$j] = $tmp;            
                          } else {                
                               break;            
                          }        
                      }    
               }          
               return $arr;
     }


七、快速排序

<?php
function quickSort($arr) {
    $len = count($arr);     
    if($len <= 1) return $arr;     
    $base_num = $arr[0];    
    $left_array = [];    
    $right_array = [];    
    for($i=1; $i<$len; $i++) {        
          if($base_num > $arr[$i]) {            
              $left_array[] = $arr[$i];        
          } else {            
              $right_array[] = 
              $arr[$i];        
           }    
     }    
     $left_array = self::quickSort($left_array);    
     $right_array = self::quickSort($right_array);    
     return array_merge($left_array, array($base_num), $right_array);
  }


最后修改:2023-03-21 15:32:20