Php入门教程之PHP 运算符用法说明

 更新时间:2016年11月25日 15:03  点击:1738
在php中运算符是我们程序开发中最基本的一个知识点了,下面我来给各位同学介绍在php中PHP 运算符一的些常用用法介绍。


PHP 运算符

PHP 运算符主要包括:

1.算术运算符
2.赋值运算符
3.比较运算符
4.三元运算符
5.逻辑运算符
6.字符串运算符
7.错误控制运算符

算术运算符

运算符 说明 例子 运算结果
+ 加 $x = 2;
$y = $x+1; $y = 3
- 减 $x = 2;
$y = $x-1; $y = 1
* 乘 $x = 2;
$y = $x*3; $y = 6
/ 除,返回结果为浮点类型 $x = 6;
$y = $x/3; $y = 2
% 求余,返回结果为浮点类型 $x = 6;
$y = $x%4; $y = 2
++ 递加,分为前加和后加
对布尔值和 NULL 无效 $x = 2;
++$x;(前加)
$x++;(后加) $x = 3
– 递减,分为前递减和后递减
对布尔值和 NULL 无效 $x = 2;
–$x;(前减)
$x–;(后减) $x = 1

对于前加和后加,执行后的结果都是变量加1,其区别在于执行时返回结果不一样,参考下面两个例子:


1 <?php 

2 $x = 2; 

3 echo $x++;  //输出2 

4 echo $x;    //输出3 

5   

6 $x = 2; 

7 echo ++$x;  //输出3 

8 echo $x;    //输出3 

9 ?>
递减同理。

赋值运算符
赋值运算符“=”用于赋值运算,赋值运算符的作用在于把右边的值赋值给左边变量:


1 $x = 2;
该例子将整型值 2 赋值给变量 $x。

赋值运算符其他用法
赋值运算符可以嵌套使用:


1 <?php 

2 $y = ($x = 2) + 5;    //结果为 $x=2,$y=7 

3 ?>
赋值运算符的一些变形使用方法:


1 $y += $x;
实际上它等同于:

 

1 $y = $y + $x;
同理有:


1 $y -= $x; 

2 $y *= $x; 

3 $y /= $x; 

4 $y %= $x; 

5 $y .= $x;   // . 为连接运算符,见字符串运算符
比较运算符

运算符 说明 例子 运算结果
== 等于 2 == 3 FALSE
!= 不等于,也可写作<> 2 == 3 TRUE
> 大于 2 > 3 FALSE
< 小于 2 < 3 TRUE
>= 大于等于 2 >= 3 FALSE
<= 小于等于 2 <= 3 TRUE

比较运算符也可用于字符串比较。

三元运算符
三元可以视作是特殊的比较运算符:


 (A) ? (B) : (C)
语法解释:在 A求值为 TRUE 时整个表达式的值为 B,否则为 C。

例子:

 

1 $y = ($x == 2) ? $x : 1;

该例子判断变量$x的值是否等于2,如果$x等于2,那么$y的值就等于$x(也就是等于2),反之$y就等于1。

逻辑运算符

运算符 说明 例子 运算结果

&& 逻辑与,也可写作 and $x = 2;
$y = 6;
$x && $y > 5 FALSE

|| 逻辑或,也可写作 or $x = 2;
$y = 6;
$x && $y > 5 TRUE

! 逻辑非,取逻辑的反面 $x = 2;
$y = 6;
!($x > $y) TRUE

连接运算符
字符串运算符主要指连接运算符“.”,它将连接其左右参数字符串。

例子:


$x = "beijing"; 

$y = $x."你好";       //$y = "beijing你好"


如该例子所示,字符和变量共同输出时需要使用连接运算符。

连接符与赋值运算符一起可构成连接赋值运算符:


$x = "beijing"; 

$x .="你好";      //$x = "beijing你好”

错误控制运算符
错误控制运算符:@,当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

<?php
/* 读取文件 */
$my_file = @file ('file1') or
    die ("打开文件失败,错误信息: '$php_errormsg'");
?>

错误控制运算符经常用于在可能产生错误的地方屏蔽 PHP 的系统错误而提示友好的错误信息


运算符优先级的一个例外


今天在老王的技术手册看到一个问题:

<?phpif ($a = 100 && $b = 200) {     var_dump($a, $b);}

输出是什么?

这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单,

如果说布尔与之前的部分, 是由于优先级的问题, 但是如果仅仅是优先级的问题的话, 那么结果应该是:

$a = (100 && $b) = 200而实际上的结果, 确实高优先级的&&让步给次优先级的=, 让 $b = 200 先结合了.

究其原因, 是因为PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:

Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.

这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,

有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:

laruence你好:
问一个php运算符优先级的问题
$t == 1 && $tt = 2
按照php运算符优先级应该是
(($t == 1) && $tt) = 2
这个顺序执行,但实际上应该是
($t == 1) && ($tt = 2)
我有些不太理解。

其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:

expr_without_variable:  // 有隐规则存在, 相当于T_BOOLEAN_AND成为了"一元操作符".  |   expr T_BOOLEAN_AND  { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); }

exp最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:

$result = mysql_query(*)  or die(mysql_error());

类似的还可以用or来实现三元操作符(?:)的功能:

$person = $who or $person = "laruence";

//等同于:    

$person = empty($who)? "laruence" : $who;

 

php 恒等运算符(===)与比较运算符(==)的区别


恒等计算符,和比较运算符号“==”的区别是 “==”不会检查条件式的表达式的类型,恒等计算符会同时检查表达式的值与类型。
这主要和php是无类型语言有关,比如 NULL,FALSE,array(),”",0,”0″这几个值如果用==他们是相等的,但是你如果判断出某个值真正的返回值呢,就可以用 ===
$a = 0;
$b = FALSE;
$a === FALSE 不成立,但 $b === FALSE成立,如果是==, $a == FALSE 和 $b == FALSE都成立

===运算符还是很有用的,php有些内置函数成功会返回某个值,失败会返回false,假如成功了但返回的是”"或者0之类的空值你怎么判断成功或者失败呢?这是就可以用 === ,它可以区分变量类型。

参考:

比较运算符 例子 名称 结果
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。(PHP 4 引进)
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a !== $b 非全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。(PHP 4 引进)
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。

如果比较一个整数和字符串,则字符串会被转换为整数。如果比较两个数字字符串,则作为整数比较。此规则也适用于 switch语句。

<?php

var_dump(0 == "a"); // 0 == 0 -> true

var_dump("1" == "01"); // 1 == 1 -> true

var_dump("1" == "1e0"); // 1 == 1 -> true

switch ("a") {

case 0:

    echo "0";

    break;

case "a": // never reached because "a" is already matched with 0

    echo "a";

    break;

}

?>


说了一堆了我们再看看另一篇文章


运算符号(php)操作符号

按运算符号的功能分为

■算数运算符 + – * / % ++ –
■字符串运算符(连接运算符) .
■赋值运算符  =   +=  -=  *=   %=   .=
■比较(关系、条件)运算符>  <   >=   <==  ==  ===  !=  <>  !==
■逻辑运算符 && and    ||or   !  not
■位运算符 &  |   ~ ^ <<   >>  >>>
■其他的预算符?  : ” ->  ->  ::  & $
■()改变优先级别
%有两个目的使用:整除运算;控制范围,不要用小数,也不要用负数
%会把两边的数转为整数后在整除
<?php
$year=2010;
if($yeay%4==0 && $year%100!=0  ||$year%400==0){
echo"今年是闰年";
}
控制范围
$num=4600009;
echo $num%10;//9任何数和10 取余不会超过9
$a++(先用变量再自增1)  ++$a(先自增1在用变量)  $a--   --$a
<?php
$a=10;
$b=$a++;//$b=10  $a=11
$c=--$b;//$c=9 $b=9
//    9           +     11
$d=$c++  +  ++$c;//$d=20 $c=11
$e=$d--  -  --$d;//2
$name="ljw";
$age=25;
$heigh=1.75;
echo "我的名字是:{$name}我的年龄:{$age}我的身高{$hegit}";
echo'我的名字是:'.$name.'我的年龄:'.$age.'我的身高'.$hegit.;
echo "/$age=".$age;比较运算符———条件运算法符————-关系运算符
比较后的结果只有一种  boolean  true   false
===全等运算符
!==
—————===比较时不仅要求内容相同,也要求类型相同
&按位与(两个都为1才为1)    |按位或(有一个为1就为1)   ^异或(不同为1相同为0)  ~取反(0与1互换) 左移  << , 右移>>   无符号>>右移
—————————————————————————————–
$a=20;//16+4                00000000   00000000  00000000  00010100
—————————————————————————————–
$b=30;//16+8+4+2    00000000   00000000  00000000  00011110
—————————————————————————————–
$c= $a & $b;
echo $c;
&和|既可以做为逻辑运算符,又可以作为位运算符
&&  ||
短路问题:&& 和||会发生短路
&& 在做运算时,如果前边的数为false,则后面是否为true,整个表达式都是false
|| 在做运算是,如果前面的数是true,则后边是否为false,整个表达式都为true;
&或|运算时,两边都会被执行。
其他运算符
条件?成立执行这里 :不成立则执行这里
反引号执行操作系统命令 “

$str=`ipconfig/all`;
echo '<pre>';
echo $str;
echo '</pre>'@getType();错误控制符,放在表达式前边,表达式有错误的时候屏蔽掉,不推荐使用。

数据类型在php并不像java中那详细那么多种类型,下面我来给各位同学介绍php 数据类型的一些基础知道,各位同学可参考。

PHP 数据类型
PHP 支持八种原始类型(type)。

四种标量类型:

1.string(字符串)
2.integer(整型)
3.float(浮点型,也作 double )
4.boolean(布尔型)
两种复合类型:

1.array(数组)
2.object(对象)
两种特殊类型:

1.resource(资源)
2.NULL(空)
查看变量类型
通过 gettype() 函数可以方便的查看某个变量的类型:

<?php
$bool = TRUE;     // 布尔型
$str  = "foo";     // 字符串
$int  = 12;        // 整型

echo gettype($bool);        // 输出 boolean
echo gettype($str);     // 输出 string
echo gettype($int);     // 输出 integer
?>

判断变量类型

如果想通过判断变量类型来可以使用 is_type 函数:

<?php
$var_int  = 12;

// 如果 $var_int 是 int 类型,这进行加法
if (is_int($var_int)) {
    $var_int = $var_int+4;
}
echo $var_int;  // 输出 16
?>

以上基本就是PHP数据类型的基本内容,大家如果想了解具体每个数据类型的用法,可以查阅PHP手册,里面有详细的说明。

数据类型转换

PHP数据类型有三种转换方式:

•在要转换的变量之前加上用括号括起来的目标类型
•使用3个具体类型的转换函数,intval()、floatval()、strval()
•使用通用类型转换函数settype(mixed var,string type)
 第一种转换方式: (int)  (bool)  (float)  (string)  (array) (object)
 
•<?php  
•$num1=3.14;   
•$num2=(int)$num1;   
•var_dump($num1); //输出float(3.14)   
•var_dump($num2); //输出int(3)   
•?> 

第二种转换方式:  intval()  floatval()  strval()

 
•<?php  
•$str="123.9abc";   
•$int=intval($str);     //转换后数值:123   
•$float=floatval($str); //转换后数值:123.9   
•$str=strval($float);   //转换后字符串:"123.9"    
•?> 

第三种转换方式:  settype();

 
•<?php  
•$num4=12.8;   
•$flg=settype($num4,"int");   
•var_dump($flg);  //输出bool(true)   
•var_dump($num4); //输出int(12)   
•?>

PHP数据类型隐性转换的陷阱

我这里说的是php5+上跑的,php4的请飘过。

先把错误报告打开,以防看不到错误信息
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
?>

根据php manual 中 http://www.php.net/manual/zh/language.operators.comparison.php
“Comparison Operators” 一章的说明可知,number 和string进行比较的时候,会先将string类
型首先转化为number,然后再进行比较操作。

1.类型自动转换为数组
当我们把一个非数组的变量当做数组来调用的时候,该变量在调用时数据类型临时自动转换成数组。
例如如下代码:
<?php
$str = 'string';
var_dump($str['aaa']);  // string(1) "s"
var_dump($str);  // string(6) "string"

if($str['aaa'] === $str[0]) {
    print "===";
}
?>

如下例子可以明显的看出下标类型自动转换在发生。
<?php 
$link = '<a href="http://yulans.cn">yulans</a>'; 
$key = '1-10'; 
echo "$link[$key]n";  // 同 $link[1]
echo "{$link[$key]}n";  // 同 $link[1]
//echo "$link['$key']n";  // 报错
echo "{$link['$key']}n";  // 同 $link[0]
?> 

这里字符串在 var_dump($str['aaa']) 被临时转换成了数组 array('s','t','r','i', 'n','g'),而用关联数组方式
$str['aaa']读取索引数组的值,关联数组的下标'aaa'将被转换成整形下标,
因而在这里的$str['aaa']全等于$str[0]。

其他数据类型隐性转换成数组也隐藏有陷阱,一般都不是报出undefined index错误。举例如下代码:
<?php
/**
 * 测试变量隐性转换成数组
 *
 * @param mixed $param
 */
function test2Arr($param) {
    var_dump($param['abc']);
}

test2Arr(false); // NULL
test2Arr(123); // NULL
test2Arr(123.456); // NULL
test2Arr('string'); // string(1) "s"
test2Arr(array('abc'=>'text'));  // string(4) text
test2Arr(new ArrayObject()); // Notice: undefined index: abc

?>

解决办法:
函数参数数据类型是数组的时候,防止用户输入字符串导致错误
如下例子,当添加用户的时候,我们要求用户必须输入用户名。没有哪个SB把要求是数组的参数传入
字符串,但是防人之心不可无,说不定我连续工作超过十几个小时后一不小心就成那个SB了,又或许
某人想绕过代码执行操作。
<?php
/**
 * 添加用户(错误的写法)
 *
 * @param array $user
 */
function addUser($user) {
    if(empty($user['name'])) {  // 这里当输入类型是不为空的字符串的时候会出错,
        echo "用户名必填n";
        return false;
    }

    // do sth.

    echo "测试n";

    return true;
}

/**
 * 添加用户(正确的写法)
 *
 * @param array $user
 */
function addUser2($user) {
    if(!is_array($user) || empty($user['name'])) {
        echo "用户名必填n";
        return false;
    }

    // do sth.

    echo "测试n";

    return true;
}

$user = 'xiaoxiao';
addUser($user);
addUser2($user);


?>


2.纯数字字符串比较时自动转换成整形超过范围时发生溢出
<?php
$x1 = '111111111111111111';
$x2 = '111111111111111112';

echo ($x1 === $x2) ? "true" : "false";  // false 如我们所愿,这两个字符串确实不一样。
echo ($x1 == $x2) ? "true" : "false";    // true 这里被偷偷的转换类型了,
                                                           // 成了 echo (intval($x1) == intval($x2)) ? "true" : "false"; 整形溢出

?>


3、整形和字符串比较时数据类型隐性转换有可能发生问题
<?php
$number = 0;
$string = 'text';

if($number == $string) {
    print "true";
} else {
    print "false";
}

?>

很遗憾这里输出的是 true
我们知道 $number === $string 肯定是false,手册上说 === 是比较值&&数据类型,而用 == 只是比较值,
$number == $string 这里不是比较值吗? '0' 和 'text' 明显不一样啊。小心了,这里的$string是
先被秘密转成和$number一样的整形再比较的,$number == (int)$string的确是true


4. in_array 小陷阱
<?php

var_dump(in_array(0, array('s')));  // true

?>
因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类型, 's'转化为number的结果为0,
而0 == 0 的结果是true,所以in_array(0, array('s', 'ss'))的结果也是true

如果把in_array 的第三个参数strict设置为 true,比较的时候 就会判断值和类型是否都相当。
如果都相当的话,才会返回true,否则返回false.

If和else在php中是条件判断语句,他可以多层实现数据的判断了,下面我来给大家介绍If和else使用方法与一些简单的实例了。

条件语句
当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。

if…else 语句

在条件成立时执行一块代码,条件不成立时执行另一块代码
elseif 语句

与 if…else 配合使用,在若干条件之一成立时执行一个代码块
If…Else 语句


语法

if (condition)
  code to be executed if condition is true;
else
  code to be executed if condition is false;

如果您希望在某个条件成立时执行一些代码,在条件不成立时执行另一些代码,请使用 if….else 语句。


1.  if 条件语法(只在条件为true的情况下执行语句,为false不执行操作):


 使用语法:
1.if(expr)     //判断条件

2.statement     //符合条件后应该执行的语句


注意:符合if条件后,如果要执行的语句不止一行,则需要用大括号 {} 将多行语句围起来


示例:

 代码如下 复制代码

if ($$a > $$b) {
echo "a is bigger than b";
$$b = $$a;
}
?>

实例

如果当前日期是周五,下面的代码将输出 “Have a nice weekend!”,否则会输出 “Have a nice day!”:

 代码如下 复制代码

<html>
<body>

<?php
$d=date("D");
if ($d=="Fri")
  echo "Have a nice weekend!";
else
  echo "Have a nice day!";
?>

</body>
</html>

如果需要在条件成立或不成立时执行多行代码,应该把这些代码行包括在花括号中:

 代码如下 复制代码

<html>
<body>

<?php
$d=date("D");
if ($d=="Fri")
  {
  echo "Hello!<br />";
  echo "Have a nice weekend!";
  echo "See you on Monday!";
  }
?>

</body>
</html>

ElseIf 语句
如果希望在多个条件之一成立时执行代码,请使用 elseif 语句:

语法

 代码如下 复制代码

if (condition)
  code to be executed if condition is true;
elseif (condition)
  code to be executed if condition is true;
else
  code to be executed if condition is false;


实例
如果当前日期是周五,下面的例子会输出 “Have a nice weekend!”,如果是周日,则输出 “Have a nice Sunday!”,否则输出 “Have a nice day!”:

 代码如下 复制代码
1.//请将以下代码复制进html文件中进行测试  
2.<html>  
3.<body>  
4.<?php  
5.$d=date("D");  
6.if ($d=="Fri")  
7.  echo "哦耶!明天一起浪打浪!";   
8.elseif ($d=="Sun")  
9.  echo "尼玛!明天又开始悲剧了!";   
10.else 
11.  echo "既不悲剧也不喜剧的生活真无聊!";   
12.?>  
13.</body>  
14.</html> 
</html>

 代码如下 复制代码

//else if语句的应用

    $moth = date("n");                                //设置月份变量$moth
    $today = date("j");                                //设置日期变量$today
    if ($today >= 1 and $today <= 10){                //判断日期变量是否在1-10之间
        echo "今天是".$moth."月".$today."日上旬";    //如果是,说明是上旬
    }elseif($today > 10 and $today <= 20){            //否则判断日期变量是否在11-20之间
        echo "今天是".$moth."月".$today."日中旬";    //如果是,说明是中旬
    }else{                                            //如果上面两个判断都不符合要求,则输出默认值
        echo "今天是".$moth."月".$today."日下旬";    //说明是本月的下旬
    }


 

一个总结上面实例

 代码如下 复制代码


<?php  
/* php if else 判断实例 */ 
$flag = $_POST['flag'];   
// 这里是单个if的应用,如果表单提交了$flag=1,5-19行是一个代码块,当这个if成立这段代码块被执行   
if ($flag) {   
    echo '你提交了表单<br>';   
    $love = $_POST['love'];   
    // 这里是if..else,同上,但如果$love不成立else下11行被执行,   
    // 显然一个代码片段如果只有一行可以不使用{},我们还是建议都使用{}来表示一个代码片段   
    if ($love) {   
        echo '你喜欢PHP<br>';   
    } else {   
        echo '你不喜欢PHP?<br>';   
    }   
       
    $from = $_POST['from'];   
    // 这里是if elseif else
    if ($from==1) {   
        echo '你从网上知道PHP。<br>';   
    } elseif ($from==2) {   
        echo '你从朋友知道PHP。<br>';   
    } else {   
        echo '你从其它地方知道PHP。<br>';   
    }   
}   
?><br>   
  
<form method="post">   
<input type="hidden" name="flag" value="1" />   
<input name="love" type="checkbox" value="1">我喜欢PHP<br>   
你怎么知道PHP的   
<select name="from">   
<option value="1">网上</option>   
<option value="2">朋友</option>   
<option value="0">其它</option>   
  
</select>   
<input type="submit" value="提交" />   
</form>  
<?php
$flag = $_POST['flag'];
// 这里是单个if的应用,如果表单提交了$flag=1,5-19行是一个代码块,当这个if成立这段代码块被执行
if ($flag) {
    echo '你提交了表单<br>'
    $love = $_POST['love'];
    // 这里是if..else,同上,但如果$love不成立else下11行被执行,
    // 显然一个代码片段如果只有一行可以不使用{},我们还是建议都使用{}来表示一个代码片段
    if ($love) {
        echo '你喜欢PHP<br>';
    } else {
        echo '你不喜欢PHP?<br>';
    }
    
    $from = $_POST['from'];
    // 这里是if elseif else
    if ($from==1) {
        echo '你从网上知道PHP。<br>';
    } elseif ($from==2) {
        echo '你从朋友知道PHP。<br>';
    } else {
        echo '你从其它地方知道PHP。<br>';
    }
}
?>
<form method="post">
<input type="hidden" name="flag" value="1" />
<input name="love" type="checkbox" value="1">我喜欢PHP<br>
你怎么知道PHP的
<select name="from">
<option value="1">网上</option>
<option value="2">朋友</option>
<option value="0">其它</option>

 

</select>
<input type="submit" value="提交" />
</form>

 

if else条件是程序中最基本最常用的结构

if 判断后面的条件如果为true则执行if下面{}中的代码

else 如果if条件不成立为false则执行else下面{}中的代码

else if如果要使用多个条件判断时使用elseif

什么时候变量等同为true

int类型 值不为0
float类型 值不为0
string 值不为 ''或'0'
array 数组不为空
变量不为null

Switch语句在php中我们叫他为开关语句,下面我来介绍Switch语句一些基本知识与应用中Switch语句的作用,有需要了解的朋友可参考。

Switch 语句

工作原理:

1.对表达式(通常是变量)进行一次计算
2.把表达式的值与结构中 case 的值进行比较
3.如果存在匹配,则执行与 case 关联的代码
4.代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
5.如果没有 case 为真,则使用 default 语句


如果您希望有选择地执行若干代码块之一,请使用 Switch 语句。

使用 Switch 语句可以避免冗长的 if..elseif..else 代码块。

语法

 代码如下 复制代码

switch (expression)
{
case label1:
  code to be executed if expression = label1;
  break;
case label2:
  code to be executed if expression = label2;
  break;
default:
  code to be executed
  if expression is different
  from both label1 and label2;
}

实例

工作原理:

1.对表达式(通常是变量)进行一次计算
2.把表达式的值与结构中 case 的值进行比较
3.如果存在匹配,则执行与 case 关联的代码
4.代码执行后,break 语句阻止代码跳入下一个 case 中继续执行
5.如果没有 case 为真,则使用 default 语句

 代码如下 复制代码


<?php
switch ($x)
{
case 1:
  echo "Number 1";
  break;
case 2:
  echo "Number 2";
  break;
case 3:
  echo "Number 3";
  break;
default:
  echo "No number between 1 and 3";
}
?>

</body>
</html>


另外一个实例,利用switch实现一个页面多用途,首先建立test.php页面:

 代码如下 复制代码

<?php
echo "<a href='solution.php?action=add'>增加</a><br><br>";
echo "<a href='solution.php?action=del'>删除</a><br><br>";
echo "<a href='solution.php?action=search'>查找</a><br><br>";
echo "<a href='solution.php?action=update'>更新</a>";
?>

    当然这里sunec省略了其他大部分的代码,只是把其中一些提交按钮写了出来。我们可以看到,无论点击哪个按钮,我们都会跳转到solution.php页面,唯一不不同的是,问号后的action的内容分成了4种。我们可以把它称作是一种提示。

    接着,让我们看看solution.php是如何处理这四种操作的。

 代码如下 复制代码

<?php
$action=$_GET["action"];

switch ($action)
{
 case "add":
 echo "现在可以实现增加功能!";
 break;
 case "del":
 echo "现在可以实现删除功能!";
 break;
 case "search":
 echo "现在可以实现查询功能!";
 break;
 case "update":
 echo "现在可以实现更新功能!";
 break;
}
?>

再看个简单的实例

 代码如下 复制代码

<html>
<head>
<title>A switch Statement</title>
</head>
<body>
<?php
$mood = 'sad';
switch ( $mood ) {
    case 'happy':
        print 'I'm in a good mood';
        break;
    case 'sad':
        print 'Don't be down!';
        break;
    default:
        print 'Neither happy nor sad but $mood';
}
?>
</body>
</html>

循环语句在php中很多种,包括有如:for,foreach,while,do while,list,each等等这些都可以用在我们开发中,下面我来介绍常用的PHP 循环语句

今天就是PHP基础知识的最后两篇文章,目的很简单就是让大家对PHP有个初步的认识,这篇主要说下PHP循环,它用于执行相同的代码块指定的次数。为我们的开发节省时间。
循环

在您编写代码时,您经常需要让相同的代码块运行很多次。您可以在代码中使用循环语句来完成这个任务。

在 PHP 中,我们可以使用下列循环语句:

while
    只要指定的条件成立,则循环执行代码块
do…while
    首先执行一次代码块,然后在指定的条件成立时重复这个循环
for
    循环执行代码块指定的次数
foreach
    根据数组中每个元素来循环代码块

while 语句

只要指定的条件成立,while 语句将重复执行代码块。
语法
while (condition)
code to be executed;
例子

下面的例子示范了一个循环,只要变量 i 小于或等于 5,代码就会一直循环执行下去。循环每循环一次,变量就会递增 1:

 代码如下 复制代码

<html>
<body>

<?php
$i=1;
while($i<=5)
  {
  echo "The number is " . $i . "<br />";
  $i++;
  }
?>

</body>
</html>


do…while 语句

do…while 语句会至少执行一次代码 – 然后,只要条件成立,就会重复进行循环。
语法
 do
 {
 code to be executed;
 }
 while (condition);
例子

下面的例子将对 i 的值进行一次累加,然后,只要 i 小于 5 的条件成立,就会继续累加下去:

 代码如下 复制代码

<html>
<body>

<?php
$i=0;
do
  {
  $i++;
  echo "The number is " . $i . "<br />";
  }
while ($i<5);
?>

</body>
</html>


for 语句

如果您已经确定了代码块的重复执行次数,则可以使用 for 语句。
语法
 for (initialization; condition; increment)
 {
   code to be executed;
4 }

注释:for 语句有三个参数。第一个参数初始化变量,第二个参数保存条件,第三个参数包含执行循环所需的增量。如果 initialization 或 increment 参数中包括了多个变量,需要用逗号进行分隔。而条件必须计算为 true 或者 false。
例子

下面的例子会把文本 “Hello World!” 显示 5 次:

 代码如下 复制代码

<html>
<body>

<?php
for ($i=1; $i<=5; $i++)
{
  echo "Hello World!<br />";
}
?>

</body>
</html>

foreach 语句

foreach 语句用于循环遍历数组。

每进行一次循环,当前数组元素的值就会被赋值给 value 变量(数组指针会逐一地移动) – 以此类推。
语法
 foreach (array as value)
 {
     code to be executed;
 }

例子

下面的例子示范了一个循环,这个循环可以输出给定数组的值:

 代码如下 复制代码

<html>
<body>

<?php
$arr=array("one", "two", "three");

foreach ($arr as $value)
{
  echo "Value: " . $value . "<br />";
}
?>

</body>
</html>

一个遍历目录函数

 代码如下 复制代码
<?php  
/* 
*   递归获取指定路径下的所有文件或匹配指定正则的文件(不包括“.”和“..”),结果以数组形式返回 
*   @param  string  $dir 
*   @param  string  [$pattern] 
*   @return array 
*/  
function file_list($dir,$pattern="")  
{  
    $arr=array();  
    $dir_handle=opendir($dir);  
    if($dir_handle)  
    {  
        // 这里必须严格比较,因为返回的文件名可能是“0”   
        while(($file=readdir($dir_handle))!==false)  
        {  
            if($file==='.' || $file==='..')  
            {  
                continue;  
            }  
            $tmp=realpath($dir.'/'.$file);  
            if(is_dir($tmp))  
            {  
                $retArr=file_list($tmp,$pattern);  
                if(!emptyempty($retArr))  
                {  
                    $arr[]=$retArr;  
                }  
            }  
            else  
            {  
                if($pattern==="" || preg_match($pattern,$tmp))  
                {  
                    $arr[]=$tmp;  
                }  
            }  
        }  
        closedir($dir_handle);  
    }  
    return $arr;  
}  
  
// 列出网站根目录下所有以".php"扩展名(不区分大小写)结尾的文件   
echo '<pre>';  
print_r(file_list($_SERVER['DOCUMENT_ROOT'],"//.php$/i"));  
echo '</pre>';  
?>  

这个就可以方便的无限目录遍历了。.

 

foreach与while性能比较


在循环里进行的是数组“读”操作,则foreach比while快:

在循环里进行的是数组“写”操作,则while比foreach快

 代码如下 复制代码

/**
 * while跟foreach函数性能比较
 *
 */
 
// foreach 函数
foreach ($array as $key => $value) {
    echo $array[$key] = $value . '...';
}
 
// while 函数
while (list($key) = each($array)) {
    $array[$key] = $array[$key] . '...';
}

总结:通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很
快的,这是因为PHP采用的复制机制是“引用计数,写时复制”,也就是说,即便在PHP里复制一个变量,最初的形式从根本上说其实
仍然是引用的形式,只有当变量的内容发生变化时,才会出现真正的复制,之所以这么做是出于节省内存消耗得目的,同时也提升了
复制的效率。

 


这样看来,foreach的高效读操作就不难理解了。另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结
论,多数情况下,类似foreach ($array as $key => $value)形式的做数组写操作得代码都应该被替换成while (list($key) =
each($array))。这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几
百几千几万次数组循环操作,差异就会明显放大。

[!--infotagslink--]

相关文章

  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • Lua语言新手简单入门教程

    这篇文章主要给大家介绍的是关于Lua语言新手入门的简单教程,文中通过示例代码一步步介绍的非常详细,对各位新手们的入门提供了一个很方便的教程,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。...2020-06-30
  • c#的异或运算符介绍

    这篇文章介绍了c#的异或运算符,有需要的朋友可以参考一下...2020-06-25
  • 轻松学习C#的运算符

    轻松学习C#的运算符,对C#的运算符感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的运算符。...2020-06-25
  • C#中38个常用运算符的优先级的划分和理解

    这只我自己在学C#中的一些总结,其中对于各级的划分方式、各操作符的优先级的理解并不见得正确,只是自己的看法,拿出来与大家分享...2020-06-25
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • R语言运算符知识点讲解

    在本篇文章里小编给大家分享了一篇关于R语言运算符知识点讲解内容,有兴趣的朋友们可以参考下。...2021-05-06
  • C++编程中的或||、与&&、非!逻辑运算符基本用法整理

    这篇文章主要介绍了C++中的或||、与&&、非!逻辑运算符基本用法整理,是C++入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • C#线程入门教程之单线程介绍

    这篇文章主要介绍了C#线程入门教程之单线程介绍,本文讲解了什么是进程、什么是线程、什么是多线程等内容,并给出了一个单线程代码示例,需要的朋友可以参考下...2020-06-25
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • JS不要再到处使用绝对等于运算符了

    这篇文章主要介绍了JS不要再到处使用绝对等于运算符了,对此感兴趣的同学,可以参考下...2021-05-01
  • C#编程自学之运算符和表达式

    这篇文章主要介绍了C#运算符和表达式,这是自学C#编程的第五篇,希望对大家的学习有所帮助。...2020-06-25
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • php中php://input的用法详细

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input。 下面的例子摘取的是wordpres...2016-11-25
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • CocosCreator入门教程之用TS制作第一个游戏

    这篇文章主要介绍了CocosCreator入门教程之用TS制作第一个游戏,对TypeScript感兴趣的同学,一定要看一下...2021-04-16
  • C#中this的用法集锦

    本文给大家汇总介绍了C#中的几种this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。...2020-06-25