首页
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
Search
1
【PHP】PHPoffice/PHPSpreadsheet读取和写入Excel
1,714 阅读
2
【Layui】控制页面元素展示隐藏
1,562 阅读
3
【Git】No tracked branch configured for branch master or the branch doesn't exist.
1,507 阅读
4
【PHP】PHP实现JWT生成和验证
1,419 阅读
5
精准检测,助力社交管理 —— 微信好友检测服务来袭!
1,306 阅读
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
登录
Search
标签搜索
PHP
函数
方法
类
MySQL
ThinkPHP
JavaScript
OOP
Layui
Web
Server
Linux
Docker
PHPSpreadsheet
PHPoffice
Array
设计模式
Nginx
Git
排序算法
小破孩
累计撰写
255
篇文章
累计收到
13
条评论
首页
栏目
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
页面
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
搜索到
6
篇与
的结果
2025-08-18
【PHP】bc系列函数(高精度数学运算)
PHP bc系列函数(高精度数学运算)简介:bc系列函数用于处理任意精度的十进制计算,适用于金融、科学计算等对精度要求极高的场景。需启用bcmath扩展(可通过phpinfo()检查是否启用)。特点:所有参数和返回值均为字符串类型(避免精度丢失)支持自定义小数位数(scale参数)提供基本运算、比较、幂运算等完整功能一、基础运算函数1. 加法:bcadd()// 语法:bcadd(左操作数, 右操作数, 保留小数位数) echo bcadd('123.456', '78.9', 2); // 202.36(123.456 + 78.9 = 202.356,保留2位小数) echo bcadd('100', '200', 0); // 300(整数相加)2. 减法:bcsub()// 语法:bcsub(被减数, 减数, 保留小数位数) echo bcsub('100.5', '30.25', 1); // 70.2(100.5 - 30.25 = 70.25,保留1位小数) echo bcsub('50', '75', 0); // -25(负数结果)3. 乘法:bcmul()// 语法:bcmul(乘数1, 乘数2, 保留小数位数) echo bcmul('2.5', '4.2', 2); // 10.50(2.5 × 4.2 = 10.5,保留2位小数) echo bcmul('100', '0.01', 0); // 1(整数与小数相乘)4. 除法:bcdiv()// 语法:bcdiv(被除数, 除数, 保留小数位数) echo bcdiv('10', '3', 3); // 3.333(10 ÷ 3 ≈ 3.3333...,保留3位) var_dump(bcdiv('5', '0', 0)); // false(除数为0时返回false)5. 取模(余数):bcmod()// 语法:bcmod(被除数, 除数) echo bcmod('10', '3'); // 1(10 ÷ 3 余数为1) echo bcmod('7.5', '2.5'); // 0.0(7.5 是 2.5 的整数倍)二、比较函数bccomp()// 语法:bccomp(值1, 值2, 比较精度) // 返回值:1(值1 > 值2)、0(相等)、-1(值1 < 值2) echo bccomp('10', '10', 0); // 0(相等) echo bccomp('10.5', '10.49', 1); // 1(10.5 > 10.49,精确到1位小数) echo bccomp('5.999', '6', 2); // -1(5.999 < 6,精确到2位小数)三、幂运算与开方1. 幂运算:bcpow()// 语法:bcpow(底数, 指数, 保留小数位数) echo bcpow('2', '3', 0); // 8(2³ = 8) echo bcpow('1.2', '2', 2); // 1.44(1.2² = 1.44)2. 幂运算取模:bcpowmod()// 语法:bcpowmod(底数, 指数, 模数, 保留小数位数) // 作用:(base^exponent) % modulus,比先算幂再取模更高效 echo bcpowmod('3', '3', '5', 0); // 2(3³=27,27%5=2)3. 开平方:bcsqrt()// 语法:bcsqrt(数值, 保留小数位数) echo bcsqrt('25', 0); // 5(√25 = 5) echo bcsqrt('2', 4); // 1.4142(√2 ≈ 1.4142,保留4位) var_dump(bcsqrt('-4', 0)); // false(负数无法开平方)四、全局配置函数bcscale()// 功能:设置所有bc函数的默认小数位数(全局生效) bcscale(2); // 全局默认保留2位小数 echo bcadd('1', '2'); // 3.00(使用全局配置) echo bcsub('5', '3.5'); // 1.50(自动补全2位小数) echo bcadd('1', '2', 0); // 3(局部参数优先级高于全局)关键注意事项参数类型:必须传入字符串(如'123.45'),而非数字(避免自动转换导致精度丢失)。返回值:始终为字符串,需转换类型时用(float)或(int)。扩展依赖:需在php.ini中启用extension=bcmath(重启服务生效)。精度优先级:函数的scale参数 > bcscale()全局配置。通过这些函数,PHP可以实现高精度计算,解决普通数值类型精度不足的问题。
2025年08月18日
7 阅读
0 评论
0 点赞
2024-09-30
【PHP】PHP函数详解:call_user_func()使用方法
PHP函数详解:call_user_func()使用方法 call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: <?php function nowamagic($a,$b) { echo $a; echo $b; } call_user_func('nowamagic', "111","222"); call_user_func('nowamagic', "333","444"); //显示 111 222 333 444 ?> 调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也挺有新意的: <?php class a { function b($c) { echo $c; } } call_user_func(array("a", "b"),"111"); //实例化a类并调用b方法 //显示 111 ?> call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰: <?php function a($b, $c) { echo $b; echo $c; } call_user_func_array('a', array("111", "222")); //显示 111 222 ?> call_user_func_array函数也可以调用类内部的方法的 <?php Class ClassA { function bc($b, $c) { $bc = $b + $c; echo $bc; } } call_user_func_array(array('ClassA','bc'), array("111", "222")); //显示 333 ?> call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致: <?php function a($b) { $b++; } $c = 0; call_user_func('a', $c); echo $c;//显示 1 call_user_func_array('a', array($c)); echo $c;//显示 2 ?> 另外,call_user_func函数和call_user_func_array函数都支持引用。 <?php function increment(&$var) { $var++; } $a = 0; call_user_func('increment', $a); echo $a; // 0 call_user_func_array('increment', array(&$a)); // You can use this instead echo $a; // 1 ?>
2024年09月30日
178 阅读
0 评论
0 点赞
2023-07-20
【PHP】打开文件路径的所有文件
<?php function open_dir($path) { if (!is_dir($path) || empty($path)) die("该" . $path . "不是目录"); $path = $path . '/'; $fileList = []; $dirFile = scandir($path); if (!empty($dirFile) && is_array($dirFile)) { foreach ($dirFile as $file) { if ($file != '.' && $file != '..') { $fullPath = $path . $file; if (is_dir($fullPath)) { // 子文件夹,进行递归 $fileList[$file] = open_dir($fullPath); } else { //根目录下的文件 $fileList[] = $file; } } } } return $fileList; } $list = open_dir("/www/wwwroot/8688web.com/one"); // echo '<pre>'; // print_r($list); // echo '</pre>'; ?>
2023年07月20日
289 阅读
0 评论
0 点赞
2023-07-13
【PHP】$_SERVER内容
Array ( [ALLUSERSPROFILE] => C:\ProgramData [APPDATA] => C:\Users\Administrator\AppData\Roaming [CommonProgramFiles] => C:\Program Files\Common Files [CommonProgramFiles(x86)] => C:\Program Files (x86)\Common Files [CommonProgramW6432] => C:\Program Files\Common Files [COMPUTERNAME] => USER-20230417GP [ComSpec] => C:\Windows\system32\cmd.exe [DriverData] => C:\Windows\System32\Drivers\DriverData [EFC_7072] => 1 [FPS_BROWSER_APP_PROFILE_STRING] => Internet Explorer [FPS_BROWSER_USER_PROFILE_STRING] => Default [HOMEDRIVE] => C: [HOMEPATH] => \Users\Administrator [LOCALAPPDATA] => C:\Users\Administrator\AppData\Local [LOGONSERVER] => \\USER-20230417GP [NUMBER_OF_PROCESSORS] => 4 [OneDrive] => C:\Users\Administrator\OneDrive [OS] => Windows_NT [Path] => C:\Program Files (x86)\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;E:\krhwork\phpstudy_pro\Extensions\php\php7.3.4nts;C:\ProgramData\ComposerSetup\bin;D:\krhsoftware\Git\cmd;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData\Roaming\Composer\vendor\bin [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC [PROCESSOR_ARCHITECTURE] => AMD64 [PROCESSOR_IDENTIFIER] => Intel64 Family 6 Model 158 Stepping 10, GenuineIntel [PROCESSOR_LEVEL] => 6 [PROCESSOR_REVISION] => 9e0a [ProgramData] => C:\ProgramData [ProgramFiles] => C:\Program Files [ProgramFiles(x86)] => C:\Program Files (x86) [ProgramW6432] => C:\Program Files [PSModulePath] => C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules [PUBLIC] => C:\Users\Public [SESSIONNAME] => Console [SystemDrive] => C: [SystemRoot] => C:\Windows [TEMP] => C:\Users\ADMINI~1\AppData\Local\Temp [TMP] => C:\Users\ADMINI~1\AppData\Local\Temp [USERDOMAIN] => USER-20230417GP [USERDOMAIN_ROAMINGPROFILE] => USER-20230417GP [USERNAME] => Administrator [USERPROFILE] => C:\Users\Administrator [windir] => C:\Windows [HTTP_COOKIE] => thinkphp_show_page_trace=0|0; thinkphp_show_page_trace=0|0; PHPSESSID=42ebce2914dea21a3b2a6408724e3b03; thinkphp_show_page_trace=0|0; web_token=74a57df797654a2f56951be092c992e1; user_uuid=20221111111111000001 [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9 [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_REFERER] => http://local.huizhan.com/backend/business.register/index [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 [HTTP_UPGRADE_INSECURE_REQUESTS] => 1 [HTTP_CACHE_CONTROL] => max-age=0 [HTTP_CONNECTION] => keep-alive [HTTP_HOST] => local.huizhan.com [REDIRECT_STATUS] => 200 [SERVER_NAME] => local.huizhan.com [SERVER_PORT] => 80 [SERVER_ADDR] => 127.0.0.1 [REMOTE_PORT] => 61008 [REMOTE_ADDR] => 127.0.0.1 [SERVER_SOFTWARE] => nginx/1.15.11 [GATEWAY_INTERFACE] => CGI/1.1 [REQUEST_SCHEME] => http [SERVER_PROTOCOL] => HTTP/1.1 [DOCUMENT_ROOT] => E:/krhwork/phpstudy_pro/WWW/thinkphp/huizhan/public [DOCUMENT_URI] => /index.php [REQUEST_URI] => /backend/business.register/index [SCRIPT_NAME] => /index.php [CONTENT_LENGTH] => [CONTENT_TYPE] => [REQUEST_METHOD] => GET [QUERY_STRING] => s=//backend/business.register/index [PATH_TRANSLATED] => E:/krhwork/phpstudy_pro/WWW/thinkphp/huizhan/public [PATH_INFO] => [SCRIPT_FILENAME] => E:/krhwork/phpstudy_pro/WWW/thinkphp/huizhan/public/index.php [FCGI_ROLE] => RESPONDER [PHP_SELF] => /index.php [REQUEST_TIME_FLOAT] => 1689236577.974 [REQUEST_TIME] => 1689236577 )
2023年07月13日
259 阅读
0 评论
0 点赞
2022-09-14
【PHP】PHP实现协同推荐算法
概述: 因为最近对算法这块进行了学习,所以最近对类似淘宝商品推荐的协同推荐算法进行了整理总结,本文将用php语言进行实现,文章将从以下几点进行终结: (1)什么是协同推荐算法?有什么用? (2)依据什么数学方法公式,为什么要用它? (3)实现流程是怎样的? (4)具体实现步骤。 首先,第一点,我们要实现一个算法必须要知道它有什么用,核心思想是什么?顾名思义,它的用途就是用来给我们做一些相似性推荐,推荐你喜欢的恭喜,根据你的好友等预测你喜欢的然后再推荐给你;我们举个例子来概括一下算法的核心思想:该算法的核心思想可以概括为:若a,b喜欢同一系列的物品(暂时称b是a的邻居吧),则a很可能喜欢b喜欢的其他物品。算法的实现流程可以简单概括为:1.确定a有哪些邻居 2.通过邻居来预测a可能会喜欢哪种物品 3.将a可能喜欢的物品推荐给a。 现在我们了解了这个核心思想以后,我们知道算法的核心是数学逻辑,我们必须理解其数学思想,然后再转化为编程思想达到我们的目标: 我们先回忆一下余弦定理: 可见cosA的夹角越小cosA的值越大,则边c和边b的长度越相近,因此我们利用余弦定理的向量方式类推出如下公式:1.余弦相似度(求邻居):2.预测公式(预测a可能会喜欢哪种物品): 接下来我们介绍一下实现流程: 现在我们具体看看怎样用php实现这个算法: (1)数据准备:在这里我们直接定义一组数据$userarray= [ ['name'=>'A','a'=>3,'b'=>2,'c'=>1,'d'=>5,'e'=>null,'f'=>null,'g'=>null], ['name'=>'B','a'=>1,'b'=>6,'c'=>6,'d'=>5,'e'=>2,'f'=>3,'g'=>5], ['name'=>'C','a'=>3,'b'=>5,'c'=>null,'d'=>4,'e'=>3,'f'=>3,'g'=>6], ['name'=>'D','a'=>4,'b'=>1,'c'=>1,'d'=>5,'e'=>3,'f'=>3,'g'=>3], ['name'=>'E','a'=>5,'b'=>1,'c'=>null,'d'=>4,'e'=>5,'f'=>1,'g'=>5], ['name'=>'F','a'=>1,'b'=>3,'c'=>2,'d'=>5,'e'=>6,'f'=>null,'g'=>4], ['name'=>'G','a'=>1,'b'=>5,'c'=>2,'d'=>5,'e'=>2,'f'=>3ll,'g'=>5] ]; (2)我们以A用户为对象分别计算出他们的余弦相似度,然后将其存入数组$cos中:/* * 以下示例只求A的推荐 */ $cos = []; $cos[0] = 0; $denominator_left = 0;//分母左边初始值 //开始计算cos //计算分母左边 for($i=1;$i<8;$i++){ if($userarray[0][$i] != null){//$userarray[0]代表A $denominator_left += $userarray[0][$i] * $userarray[0][$i]; } } $denominator_left = sqrt($denominator_left);//取算数平方根的值 for($i=1;$i<6;$i++){ $numerator = 0;//分子初始值 $denominator_right = 0;//分母右边初始值 for($j=1;$j<8;$j++){ //计算分子 if($userarray[0][$j] != null && $userarray[$i][$j] != null){ $numerator += $userarray[0][$j] * $userarray[$i][$j]; } //计算分母右边 if($userarray[$i][$j] != null){ $denominator_right += $userarray[$i][$j] * $userarray[$i][$j]; } } $denominator_right = sqrt($denominator_right ); $cos[$i]['cos'] = $numerator /$denominator_left /$denominator_right ;//存储当前用户的cos近似值 $cos[$i]['name'] = $userarray[$i]['name'];//存储当前用户的名字 $cos[$i]['e'] = $userarray[$i]['e'];//存储当前用户的e物品评分 $cos[$i]['f'] = $userarray[$i]['f'];//存储当前用户的f物品评分 $cos[$i]['g'] = $userarray[$i]['g'];//存储当前用户的g物品评分 }(3)我们对余弦近似值进行由大到小的排序,抽取前三个用户作为A用户的邻居,我们使用冒泡排序法对其进行排序// 第一层可以理解为从数组中键为0开始循环到最后一个 for ($i = 0; $i < count($cos) ; $i++) { // 第二层为从$i+1的地方循环到数组最后 for ($j = $i+1; $j < count($cos); $j++) { // 比较数组中两个相邻值的大小 if ($cos[$i]['cos'] < $cos[$j]['cos']) { $tem = $cos[$i]; // 这里临时变量,存贮$i的值 $cos[$i] = $cos[$j]; // 第一次更换位置 $cos[$j] = $tem; // 完成位置互换 } } } (4)接下来我们对A用户可能喜欢的物品进行预测,利用第二个公式,求出product值//计算A对e的评分 $numerator= 0;//分子初始值 $denominator= 0;//分母初始值 for($i=0;$i<3;$i++){ $numerator+= $cos[$i]['cos'] * $cos[$i]['e']; $denominator+= $cos[$i]['cos']; } $score_e = $numerator/sqrt($denominator); //计算A对f的评分 $numerator= 0;//分子初始值 $denominator= 0;//分母初始值 for($i=0;$i<3;$i++){ $numerator+= $cos[$i]['cos'] * $cos[$i]['f']; $denominator+= $cos[$i]['cos']; } $score_f= $numerator/sqrt($denominator); //计算A对g的评分 $numerator= 0;//分子初始值 $denominator= 0;//分母初始值 for($i=0;$i<3;$i++){ $numerator+= $cos[$i]['cos'] * $cos[$i]['g']; $denominator+= $cos[$i]['cos']; } $score_g= $numerator/sqrt($denominator);最后我们可以比较这些值,可以选取值最大的物品推荐给用户A
2022年09月14日
460 阅读
0 评论
1 点赞
2022-09-01
【PHP】PHP错误级别
在php编程过程中,大家一定会遇到或多或少的错误提醒,也正是这些错误提示,指引我们编写更加干净的代码,今天先写出我们主要列出的错误类型,先挖坑,写关于php错误与异常的相关知识,慢慢填坑。Deprecated最低级别错误,程序继续执行Notice 通知级别的错误 如直接使用未声明变量,程序继续执行 Warning 警告级别的错误,可能得不到想要的结果 Fatal error 致命级别错误致命级别错误,程序不往下执行 parse error 语法解析错误,最高级别错误,连其他错误信息也不呈现出来 E_USER_相关错误 用户设置的相关错误利用trigger_error()函数设置一个用户级别的 error/warning/notice 信息如何设置错误级别? error_reporting(-1)显示所有错误,error_reporting(0)屏蔽所有错误。ini_set('error_reporting',0)也是屏蔽所有错误。可以在php.ini文件中设置error_reporting来使脚本显示或不显示某些错误。ini_set('display_errors','On')显示错误。 注意:error_reporting()设置报告何种错误,而ini_set('display_errors','On')设置是否在输出错误。因而error_reporting(-1)和ini_set('display_errors',0)可用作设置日志:报告错误并且不输出。 举例:error_reporting(E_ALL&~E_NOTICE)不显示通知级别的错误。“~”表示非。
2022年09月01日
318 阅读
0 评论
0 点赞