1个PHP项目中,需要在一个大数组中遍历查询是否存在该元素,使用了in_array()导致运行程序时快时慢。通过测试得知in_array()和array_search()在大数组查询越靠后的元素时速度越慢。而使用array_key_exists()或者isset()则会很快。因为这个函数需要用到key,所以使用array_flip()反转/交换数组中所有的键名以及它们关联的键值。
1、测试环境
PHP 8.3.7和阿里云99元云主机。
1个PHP项目中,需要在一个大数组中遍历查询是否存在该元素,使用了in_array()导致运行程序时快时慢。通过测试得知in_array()和array_search()在大数组查询越靠后的元素时速度越慢。而使用array_key_exists()或者isset()则会很快。因为这个函数需要用到key,所以使用array_flip()反转/交换数组中所有的键名以及它们关联的键值。
1、测试环境
PHP 8.3.7和阿里云99元云主机。
PHP从二维数组中根据权重随机取出一个元素,权重越高取出的概率越高,抽奖的简单算法。
二维数组数据如下,weight代表权重大小
$data = [ ['id'=>1,'name'=>'特等奖','weight'=>1], ['id'=>2,'name'=>'一等奖','weight'=>3], ['id'=>3,'name'=>'二等奖','weight'=>5], ['id'=>4,'name'=>'三等奖','weight'=>10], ['id'=>5,'name'=>'四等奖','weight'=>20], ['id'=>6,'name'=>'五等奖','weight'=>30], ['id'=>7,'name'=>'谢谢抽奖','weight'=>100] ];
方法一:按照权重生成一个数组,数组随机取值即可。
BUG描述
当前时间2022-03-29,通过strtotime() 函数输出上个月份:
date('Y-m-d',strtotime("-1 month")); //输出结果为2022-03-01因为上一个月没有2022-02-29这天,所以变为2022-03-01,这个不能算是bug的bug吧。当上下月份没有今天的日时,会默认进1。当然这种月份可能存在31号和没有30号的,还有2月份也比较特殊。
问题描述
在使用腾讯云的API接口签名中,按照官方示例开发PHP、Python的接口,发现PHP和Python生成的hmac-sha256不一致。
问题分析
对以下Json字符串加密的时候,PHP和Python加密结果不一样。
假如PHP要计算一个3x3矩阵对角线元素之和,你首先需要定义这个矩阵,然后分别访问并加起对角线上的元素。
1、主对角线元素之和
$matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; $sum = 0; for ($i = 0; $i < count($matrix); $i++) { $sum += $matrix[$i][$i]; // 只加对角线上的元素 } echo "对角线元素之和是: " . $sum; //对角线元素之和是: 15 (1+5+9=15)
2、次对角线元素之和
回文数是指正读与反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等。
在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数1。
PHP判断是否回文数代码:
对于刚学PHP的新手来讲,用php求多个数的最大公约数和最小公倍数无疑是非常经典的一道练习题,对于逻辑和递归的考验还是相当到位的。
1、最大公约数
最大公约数指某几个整数共有因子中最大的一个。
如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。比如,12和15的公约数有1,3,所以12和15的最大公约数是31。