运算符
在线手册:中文  英文

算术运算符

还记得学校里学到的基本数学知识吗?就和它们一样。

算术运算符
例子 名称 结果
-$a 取反 $a 的负值。
$a + $b 加法 $a$b 的和。
$a - $b 减法 $a$b 的差。
$a * $b 乘法 $a$b 的积。
$a / $b 除法 $a 除以 $b 的商。
$a % $b 取模 $a 除以 $b 的余数。

除法运算符总是返回浮点数。只有在下列情况例外:两个操作数都是整数(或字符串转换成的整数)并且正好能整除,这时它返回一个整数。

取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。

取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。例如:

<?php

echo (3)."\n";           // prints 2
echo (% -3)."\n";          // prints 2
echo (-3)."\n";          // prints -2
echo (-% -3)."\n";         // prints -2

?>

参见手册中的数学函数


运算符
在线手册:中文  英文

用户评论:

antickon at gmail dot com (2012-03-28 23:04:04)

not listed here is the absolutely useless unary plus.

<?php
$a 
= -3;
$a = +$a;
var_dump$a ); // int(-3)

php at richardneill dot org (2011-04-18 08:13:23)

For larger numbers (above PHP_INT_MAX), use fmod() rather than %.
The other operators (+-*/) work correctly with floats and integer overflow, but % uses integer wrap. Eg.

<?php
var_dump
(0xffffffff 2);
//Prints  int(-1)   which is WRONG

var_dump(intval(fmod(0xffffffff,2)));
//Prints int(1)   which is the right answer
?>

(The reason this matters is that PHP's float is actually a double, and can accurately represent integers up to 52-bits, even on 32-bit systems)

TheWanderer (2008-06-05 03:52:03)

It is worth noticing that when working with large numbers, most noticably using the modulo operator, the results depend on your CPU architecture. Therefore, running a decent 64-bit machine will be to your advantage in case you have to perform complex mathematical operations. Here is some example code - you can compare its output on x86 and x86_64 machines:
<?php
/* tested under PHP 5.2.6-1 with Suhosin-Patch 0.9.6.2 (cli) on both i386 and amd64, Debian lenny/sid */
$a 2863311530;
$b 256;
$c $a $b;
echo 
"$c <br />\n";
echo (
2863311530 256)." <br />\n"/* directly with no variables, just to be sure */
?>

The code is expected to produce '170' if working correctly (try it in spreadsheet software).

calmarius at atw dot hu (2008-05-15 06:19:17)

Be careful when using % with large numbers.

The code:

<?php
    
echo 3333333333 3
?>

puts out -1 instead of zero!

(Due to the overflow)

Jonathon Reinhart (2006-10-16 02:11:54)

A very simple yet maybe not obvious use of the modulus (%) operator is to check if an integer is odd or even.
<?php
  
if (($a 2) == 1)
  { echo 
"$a is odd." ;}
  if ((
$a 2) == 0)
  { echo 
"$a is even." ;}
?>

This is nice when you want to make alternating-color rows on a table, or divs.

<?php
  
for ($i 1$i <= 10$i++) {
    if((
$i 2) == 1)  //odd
      
{echo "<div class=\"dark\">$i</div>";}
    else   
//even
      
{echo "<div class=\"light\">$i</div>";}
   }
?>

pww8 at cornell dot edu (2005-08-17 14:25:28)

It appears floating-point infinity (INF) is not returned from divide by zero (in PHP 5.0.0). Instead a warning is given and Boolean FALSE is returned.
I searched the various manuals and did not find relevant explanation, so am adding this.

glenn at benge dot co dot nz (2004-10-05 23:28:57)

a real simple method to reset an integer to a the next lowest multiple of a divisor
$startSeq = $startSeq - ($startSeq % $entriesPerPage);
if $startSeq was already a multiple, then " $startSeq % $entriesPerPage " will return 0 and $startSeq will not change.

arjini at gmail dot com (2004-09-08 09:48:36)

When dealing purely with HTML, especially tables, or other things in "grids"  the modulous operator is really useful for splitting up the data with a seperator.

This snippet reads any gif files from the directory the script is in, prints them out and puts in a break every 5th image.

<?php
    $d 
dir('./');
    
$i 0;
    while(
false !== ($e $d->read())){
        if(
strpos($e,'.gif')){
            ++
$i;
            echo 
'<img src="'.$e.'"/>'.chr(10);
            if(!(
$i%5))
                echo 
'<br/>';
        }
    }
?>

For tables just put </tr><tr> in place of the break.

info at sima-pc dot com (2004-05-01 14:48:33)

Note that operator % (modulus) works just with integers (between -214748348 and 2147483647) while fmod() works with short and large numbers.
Modulus with non integer numbers will give unpredictable results.

soren at byu dot edu (2003-11-19 19:49:54)

Exponentiation doesn't use ^ or ** as you might be used to with other languages. To calculate "z equals y to the x" use:
$z = pow(y,x)

易百教程