当前位置:首页 > 包含标签 PHP 的所有文章

1、浮点数坑

PHP在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,会造成Bug。这是所有语言基本上都会遇到的问题,所以基本上大部分语言都提供了精准计算的类库或函数库。

$a = 1000; $b = 999.99; var_dump($a-$b); //float(0.0099999999999909)

你认为/期望的输出是float(0.01),实际是float(0.0099999999999909)。

笛卡尔曲线得到的图像是一个类似于心形的曲线,因此也被称为心形线。这条曲线具有对称性和周期性。

数学家笛卡尔爱情公式r=a(1-sinθ),卡尔心形线极坐标方程

标准方程:(x²+y²-1)³-x²y³=0

极坐标方程:r=a(1-sinθ) (a是常数,θ是角度)

参数方程:X=2a(sinθ-1/2sin2θ)   Y=2a(cosθ-1/2cos2θ)   (0≤θ≤2π)


PHP代码:

PHP杨辉三角形

对于刚学PHP的新手来讲,用php写杨辉三角形无疑是非常经典的一道练习题,对于逻辑的考验还是相当到位的。

杨辉三角是二项式系数的一种写法,由于排列形状类似于三角形,被称为杨辉三角。杨辉三角以正整数构成,数字左右对称,每行由1开始逐渐变大,然后变小,回到1;杨辉三角的每一个数是它的左上方和右上方的数的和,我们可以将其理解为一个二维数组,通过两次循环来输出数据。


事例代码如下:

PHP插入排序(Insertion Sort)是一种简单直观的排序算法。

工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。


比如:这个数组array(4,3,5,1,2)用冒泡排序算法进行升序排列。

第1个循环循环开始,当前排序:4,3,5,1,2(默认第1个位置已经排序,从第2个位置取数3)

第1趟:取到的数3和第1个位置比较,因为4比3大,所以把数3插入到第1个位置,原第1个位置后移一位。

阶乘的定义是从1开始连乘到n,用n!表示。计算阶乘的和即为计算多个阶乘之和。


下面通过一个事例来说明:

假设要计算1! + 2! + 3! + … + 20!的和。

我们需要使用循环来逐个计算每个阶乘,并将其累加到一个变量中,可以使用for循环来完成这个过程。


下面是用PHP代码实现计算阶乘的和的示例:

PHP选择排序(Selection sort)算法是一种简单直观的排序算法。

选择排序的工作原理:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。


比如:这个数组array(4,3,5,1,2)用冒泡排序算法进行升序排列。

第1个循环循环开始,当前排序:4,3,5,1,2

PHP输出九九乘法表

对于刚学PHP的新手来讲,用php写九九乘法表无疑是非常经典的一道练习题,对于逻辑的考验还是相当到位的。


1、for循环

$colors = [ 1 => '#FF0000', // 红色 2 => '#00FF00', // 绿色 3 => '#0000FF', // 蓝色 4 => '#FFFF00', // 黄色 5 => '#FF00FF', // 紫色 6 => '#00FFFF', // 青色 7 => '#C0C0C0', // 银灰色 8 => '#800080', // 紫色 9 => '#FFA500' // 橙色 ]; echo '<table style="border:0;font-size:16pt;font-weight:bold;">'; for($i=1;$i<=9;$i++){ echo '<tr>'; for ($j=1;$j<=$i;$j++){ echo '<td style="background-color: ' . $colors[$j] . '; padding:5px 10px;">'.$j.' x '.$i.'='.$i*$j.'</td>'; } echo '</tr>'; } echo '</table>';


2、while循环

PHP程序中一个类的对象实例在整个程序运行过程中只需创建一个,则可以将这个类设计为单例类,可以避免多次创建带来系统的额外消耗。


PHP单例模式实例1:基础单例

通过类的静态成员属性来实现的。在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让户可以使用它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例。

PHP二维数组中有多个元素,其中有重复的元素,需要获取不重复元素和重复元素。


一、判断一维数组是否有重复值

使用array_unique($array)函数去除重复元素(保留第一个重复元素的键和键值),判断去重前后数组元素数量是否想等。

if (count($array) != count(array_unique($array))) { echo '该数组有重复值'; }


二、获取一维数组重复元素

1、使用scandir函数封装递归函数

php自带函数,返回当前目录下的所有文件和文件夹。注意:会有.和..分别表示当前目录和上层目录。

function file_list($path){ $func = __FUNCTION__; if(!file_exists($path)) { return []; } $files = scandir($path); $fileItem = []; foreach($files as $v) { $newPath = $path .DIRECTORY_SEPARATOR . $v; if(is_dir($newPath) && $v != '.' && $v != '..') { $fileItem = array_merge($fileItem, $func($newPath)); }else if(is_file($newPath)){ $fileItem[] = $newPath; } } return $fileItem; }


2、使用glob函数封装递归函数

php自带函数,功能和scandir类似,但比它更加强大灵活。