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

PHP常见算法合集代码实例

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

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

一、文件夹遍

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

二、九九乘法表

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

三、无限极递归分类

①、递归算法

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

②、引用算法

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

四、冒泡排序

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

五、选择排序

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

六、插入排序

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

七、快速排序

  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_arrayarray($base_num), $right_array); 
  20. }

Tags: PHP算法合集

分享到: