当前位置:首页 > PHP教程 > php应用 > 列表

PHP常见算法合集代码实例

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-09 10:15:23 浏览: 评论:0 

许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣,下面是一些常用的算法和实例,大家可以好好学习下。

一、文件夹遍

  1. <?php 
  2. function allFile($path = __DIR__, $level = 1) 
  3. { 
  4.   if (is_dir($path) && is_readable($path)) { 
  5.     if($pd = opendir($path)) { 
  6.       while (($file = readdir($pd)) !== false) { 
  7.         if($file != '.' && $file != '..') { 
  8.           if (($subPath = $path . DIRECTORY_SEPARATOR . $file) && is_dir($subPath)) { 
  9.             echo "<pre />"; 
  10.             echo '<span style="color: red;font-weight:bold;">' . str_repeat("--", $level) . $subPath . '</span>'; 
  11.             self::allFile($subPath, $level++); 
  12.           } else { 
  13.             echo "<pre />"; 
  14.             echo str_repeat("--", $level) . $subPath; 
  15.           } 
  16.         } 
  17.       } 
  18.     } 
  19.   } else { 
  20.     echo "{$path} is not a available dir"; 
  21.   } 
  22. } 

二、九九乘法表

  1. <?php 
  2. function create() 
  3. { 
  4.   for ($i = 1; $i <= 9; $i++) { 
  5.     for ($j = 1; $j <= $i; $j++) { 
  6.       echo $j . '*' . $i . '=' . $i * $j . PHP_EOL; 
  7.     } 
  8.     echo "<br />"; 
  9.   } 
  10. } 

三、无限极递归分类

①、递归算法

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

②、引用算法

  1. <?php 
  2. function getTree($array) 
  3. { 
  4.   //第一步 构造数据 
  5.   $items = []; 
  6.   foreach($array as $value) { 
  7.     $items[$value['id']] = $value; 
  8.   } 
  9.    
  10.   //第二部 遍历数据 生成树状结构 
  11.   $tree = []; 
  12.   foreach($items as $key => $value) { 
  13.     if(isset($items[$item['pid']])) { 
  14.       $items[$item['pid']]['son'][] = &$items[$key]; 
  15.     } else { 
  16.       $tree[] = &$items[$key]; 
  17.     } 
  18.   } 
  19.   return $tree; 
  20. } 

四、冒泡排序

  1. <?php 
  2. function bubbleSort($arr) 
  3. { 
  4.   $len = count($arr); 
  5.   for($i=1; $i<$len; $i++) { 
  6.     for($k=0; $k<$len-$i; $k++) { 
  7.       if($arr[$k] > $arr[$k+1]) { 
  8.         $tmp=$arr[$k+1]; 
  9.         $arr[$k+1]=$arr[$k]; 
  10.         $arr[$k]=$tmp; 
  11.       } 
  12.     } 
  13.   } 
  14.   return $arr; 
  15. }<br type="_moz"> 

五、选择排序

  1. <?php 
  2. function selectSort($arr) 
  3. { 
  4.   $len=count($arr); 
  5.   for($i=0; $i<$len-1; $i++) { 
  6.     $p = $i; 
  7.     for($j=$i+1; $j<$len; $j++) { 
  8.       if($arr[$p] > $arr[$j]) { 
  9.         $p = $j; 
  10.       } 
  11.     } 
  12.     if($p != $i) { 
  13.       $tmp = $arr[$p]; 
  14.       $arr[$p] = $arr[$i]; 
  15.       $arr[$i] = $tmp; 
  16.     } 
  17.   } 
  18.   return $arr; 
  19. } 

六、插入排序

  1. <?php 
  2. function insertSort($arr) 
  3. { 
  4.   $len=count($arr); 
  5.   for($i=1; $i<$len; $i++) { 
  6.     $tmp = $arr[$i]; 
  7.     for($j=$i-1;$j>=0;$j--) { 
  8.       if($tmp < $arr[$j]) { 
  9.         $arr[$j+1] = $arr[$j]; 
  10.         $arr[$j] = $tmp; 
  11.       } else { 
  12.         break; 
  13.       } 
  14.     } 
  15.   }    
  16.   return $arr; 
  17. } 

七、快速排序

  1. <?php 
  2. function quickSort($arr) { 
  3.   $len = count($arr); 
  4.    
  5.   if($len <= 1) return $arr; 
  6.    
  7.   $base_num = $arr[0]; 
  8.   $left_array = []; 
  9.   $right_array = []; 
  10.   for($i=1; $i<$len; $i++) { 
  11.     if($base_num > $arr[$i]) { 
  12.       $left_array[] = $arr[$i]; 
  13.     } else { 
  14.       $right_array[] = $arr[$i]; 
  15.     } 
  16.   } 
  17.   $left_array = self::quickSort($left_array); 
  18.   $right_array = self::quickSort($right_array); 
  19.   return array_merge($left_array, array($base_num), $right_array); 
  20. }

Tags: PHP算法合集

分享到: