本篇文章主要讲述,PHP中的模数运算符,接下来由SKY8G进行编辑和讲解。
大家都知道,PHP总共有八个算术运算符。最常见的是加法addition(+),减法subtraction(-),乘法multiplication(*)和除法division(/)。少为人知,但还有一个非常重要的运算符是取模modulo(%)。在本教程中,我们将重点关注取模运算符。我们将讨论它的作用以及它在实际用途。
在数学中,模运算用于找到两个数之间的余数。给定两个正数,即被除数(x)和除数(y),模数是除以y(x / y)的欧几里德除法的余数。例如,表达“7模数3”将评估为1,因为7除以3得到2的商和1的余数。另一个例子,“9模数3”将评估为0,因为9除以3的商为3,余数为0 。我们一直在做这是我们小学四年级的时候,当我们第一次学习长期分裂和剩余时。
模运算符是做什么的?
如果你有两个变量$a和$b,计算$a % $b-通常发音为“a与b取模” 取模是一个整数运算符,因此它在计算余数之前将两个操作数转换为整数。因此,基本上模数会进行整数除法,然后将从被除数中除不尽的余数返回,则这个余数就是取模的结果。
1.取模的作用可以用来取余数。
2.取模的作用可以判断两个整数是否整除
3.取模的作用一个整数与整数2取模可以判断这个整数是偶数还是奇数
4.还用更加复杂的取模运算,进行逻辑判断等等,这里就不一一列举了。
取模运算的工作原理:
a.取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
b.取模运算符%的结果和被除数的符号(正负号)相同。即$a % $b的结果和$a的符号相同。
它乍一看并不是很有用。但是,它在某些情况下非常有用。下面我举几个例子大家可以看看:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?php
echo89%37,"\n";
// Output: 15
echo89%-37,"\n";
// Output: 15
echo-89%37,"\n";
// Output: -15
echo-89%-37,"\n";
// Output: -15
echo-55.4%-4.2,"\n";
// Output: -3
echo-55.9%-4.8,"\n";
// Output: -3
echo-55%-4,"\n";
// Output: -3
输出
1
2
3
4
5
6
7 15
15
-15
-15
-3
-3
-3
例子2,判断一个数字为偶数还是奇数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 <?php
$numbers=array(66,57,89,33,22);
foreach($numbersas$num)
{
$m=($num%2);
if($m==0)
{
echo$num," is even ","
";
}else{
echo$num," is odd ","
";
}
}
// Further simplified code
foreach($numbersas$num)
{
if($num%2){
echo"$num is odd
";
}else{
echo"$num is even
";
}
}
例子3,挑战数学,例如:打印出20到250之间9的所有因子
1
2
3
4
5
6
7
8
9
10
11
12 <?php
$i=25;
while($i<=250)
{
$m=($i%9);
if($m==0)
{
echo$i."
";
}
$i++;
}
例子4,为HTML表中的交替行改变(背景颜色)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
zebratable#mytable tbody tr.even td{
background-color:#d3ecf5;
}
#mytable tbody tr.odd td{
background-color:#ff0;
}
$myData=array('one','two','three','four','five');
$row=0;
foreach($myDataas$data):?>
">
例子4,判断年份是否为闰年和平年
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
zebratable#mytable tbody tr.even td{
background-color:#d3ecf5;
}
#mytable tbody tr.odd td{
background-color:#ff0;
}
$myData=array('one','two','three','four','five');
$row=0;
foreach($myDataas$data):?>
">
例子5,另一个用途是信用卡验证。有没有想过网站如何判断您的信用卡是否有效?他们使用mod 10算法,这是大多数信用卡符合的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 <?php
//http://www.codeguru.com/cpp/i-n/internet/security/article.php/c15307/PHP-Tip-Validating-a-Credit-Card.htm
functionvalidate_cc_number($cc_number){
/* Validate; return value is card type if valid. */
$false=false;
$card_type="";
$card_regexes=array(
"/^4\d{12}(\d\d\d){0,1}$/"=>"visa",
"/^5[12345]\d{14}$/"=>"mastercard",
"/^3[47]\d{13}$/"=>"amex",
"/^6011\d{12}$/"=>"discover",
"/^30[012345]\d{11}$/"=>"diners",
"/^3[68]\d{12}$/"=>"diners",
);
foreach($card_regexesas$regex=>$type){
if(preg_match($regex,$cc_number)){
$card_type=$type;
break;
}
}
if(!$card_type){
return$false;
}
/* mod 10 checksum algorithm */
$revcode=strrev($cc_number);
$checksum=0;
for($i=0;$i
$current_num=intval($revcode[$i]);
if($i& 1) { /* Odd position */
$current_num *= 2;
}
/* Split digits and add. */
$checksum+=$current_num%10;if
($current_num>9){
$checksum+=1;
}
}
if($checksum%10==0){
return$card_type;
}else{
return$false;
}
}
例子6,计算时间秒数换算成时分秒。
1
2
3
4
5
6
7
8
9
10
11 <?php
$total_seconds=32987;
$hours=(int)($total_seconds/3600);
$minutes=(int)(($total_seconds-3600*$hours)/60);
$seconds=$total_seconds%60;
echo'Hours:'.$hours.' Minutes:'.$minutes.' Seconds:'.$seconds.'';
?>
浮点模数
如果要在两个浮点数取模计算余数,则必须使用该fmod($dividend, $divisor)函数。它返回除法后的浮点余数。余数值与被除数的符号相同,其大小将小于除数。这三个数字的关系如下:
1 $dividend=i*$divisor+$remainder
这里,值i总是一个整数。
例如:
1
2
3
4
5
6 <?php
$x=5.7;
$y=1.3;
$r=fmod($x,$y);
// $r equals 0.5, because 4 * 1.3 + 0.5 = 5.7
?>
您应该记住,由于分数的二进制或十进制表示的限制,浮点运算并不总是准确的。例如,1/3不能以十进制形式准确表示。你可以继续写0.33333 ….但在某些时候你必须停止。在十进制表示中每增加3个,您将更接近原始值,但该值仍然不是正好1/3。
这种不准确性导致fmod()功能问题 :结果并不完全可靠。
以下是该fmod()功能的一些示例:
1
2
3
4
5
6
7
8
9 <?php
echofmod(18.8,2);
// Output: 0.8
echofmod(18.8,0.2);
// Output: 0.2
?>
第二个值不准确,因为0.2完全分为18.8。这只是计算机使用的浮点格式计算的一个缺点。
好了,通过本篇文章相信你对PHP的取模有所了解了吧。模运算符虽然易于使用,但它有很多应用程序。我们通过查看正数和负数以及浮点数的模数开始本教程。之后,我们介绍了一些我们将使用模数的常见场景。