foreach 语句

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法

foreach (array as $value)
    statement
foreach (array as $key => $value)
    statement
  • 第一种格式遍历给定的 array 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步。
  • 第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。

改变元素的值

在 foreach 中有两种方式改变元素的值

  • 在 $value 之前加上 &来修改数组的元素。
  • 通过 $key 重新赋值。 
<?php
$arr1 = $arr2 = [1, 2, 3, 4];

foreach ($arr1 as &$value) {
    $value = $value * 2;
}

var_dump($arr1, $value);

foreach ($arr2 as $key => $value) {
    $arr2[$key] = $value * 2;
}
var_dump($arr2, $value);

结果输出

array(4) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
  [3]=>
  &int(8)
}
int(8)
array(4) {
  [0]=>
  int(2)
  [1]=>
  int(4)
  [2]=>
  int(6)
  [3]=>
  int(8)
}
int(4)

从结果可以看出,数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

break 语句

break 结束当前 for,foreach,while,do-while 或者 switch 结构的执
break 可以接受一个可选的数字参数来决定跳出几重循环。

 

<?php
$i = 0;
while (++$i) {
    for ($j = 0;$j < 10;$j++) {
        switch ($i) {
        case 1:
            echo "At 1".PHP_EOL;
            break 2;
        case 5:
            echo "At 5".PHP_EOL;
            break 2;
        case 10:
            echo "At 10; quitting".PHP_EOL;
            break 3;
        default:
            break;
        }
    }
}

结果输出

At 1
At 5
At 10; quitting

从结果可以看到,break 带参数可以指定跳出几重循环。

 

控制结构(二)

continue 语句

continue 在循环结构用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环。

Note: 注意在 PHP 中 switch 语句被认为是可以使用 continue 的一种循环结构。

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾。

 

<?php

$i = 0;
while ($i++ < 3) {
    echo "Outer".PHP_EOL;
    while (1) {
        echo "Middle".PHP_EOL;
        while (1) {
            echo "Inner".PHP_EOL;
            continue 3;
        }
        echo "This never gets output.".PHP_EOL;
    }
    echo "Neither does this.".PHP_EOL;
}

结果输出

Outer
Middle
Inner
Outer
Middle
Inner
Outer
Middle
Inner

switch 语句

当有多个 if elseif 条件时,可以使用 switch 来替换。

<?php

if ($a == 'apple') {
    //do something
} elseif ($a == 'bnanan') {
    //do something
} elseif ($a == 'oringe') {
    //do something
} else {
    //do something
}

使用 switch 替换为

<?php

switch ($a) {
    case 'apple':
        //do something
    break;    
    case 'bnanan':
        //do something
    break;    
    case 'oringe':
        //do something
    break;    
    default:
        //do something
}
  • switch 中每个条件需要一对 case 和 break
  • default 匹配任何条件。如果匹配了某个条件,但是该语句中没有使用 break,则 default 中的语句将会被执行。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。