【PHP面试题】请列出3种PHP数组循环操作的语法,并注明各种循环的区别。


一. 流程控制考点

1. PHP的遍历数组的三种方式及各自区别

1) 遍历数组的方式

  • 使用 for循环;
  • 使用 foreach循环;
  • 使用 while、list()、each()组合循环;

2) 区别

  • for循环:只能遍历索引数组;
  • foreach循环:可以遍历索引和关联数组;
  • 联合使用list()、each() 和 while循环:可以遍历索引和关联数组;
  • while、list()、each()组合不会 reset()操作【即不会将数组的指针重置】;
  • foreach遍历会对数组进行reset()操作。

2. 延伸:分支结构

1) if …elseif:

  • 在 elseif 语句中 只能有一个表达式为 true,即 在 elseif 语句中 只能有一个语句块被执行,多个 elseif从句是排斥关系;
  • 使用 elseif 语句 有一个基本原则: 总是把优先范围小的条件放在前面处理。【即把可能性大的放到前面】

2) switch…case…:

  • 和 if 不同的是,switch 后面的控制表达式的数据类型只能是整型、浮点型或者字符串;
  • continue 语句 作用到 switch 的作用类似于 break ;
  • 跳出 switch 外的循环( for(){switch(){ case …: … continue2; }}),可以使用 continue2;
  • 底层原理:switch … case 会生成跳转表,直接跳转到对应 case (不会一层一层去判断);
  • 效率:如果条件比一个简单的比较要复杂得多,或者在一个很多次的循环中,那么用 switch 语句可能会快一些

代码执行:

for() {
    switch($var) {
        case...:
            break; // 等价于 continue;【如果需要其作用于 for循环,此处应为 continue2(跳出两层循环)】
        case...:
            break;
        case...:
            break;
        default: ...:
            break;
    }
}

二. 解题方法

注:理解循环内部机制,更易于记忆 foreach的reset 特性,分支结构中理解了 switch…case 的执行步骤也就不难理解为什么效率高了。

三. 真题:

PHP中如何优化多个 if…else 语句的情况?

  • 表达式的可能性越大,越往前放;
  • 如果判断的是一个比较复杂的结构,且判断的结构是整型、浮点型或字符串类型,则可以使用 switch…case 来进行替换,此时效率会提升。

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
 上一篇
PHP 自定义函数及内部函数考察点 PHP 自定义函数及内部函数考察点
一、变量的作用域 变量的作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围)。大部分的PHP变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。 任何用于函数内部的变量
2020-07-06
下一篇 
【PHP 运算符】foo()和 @foo()之间的区别 【PHP 运算符】foo()和 @foo()之间的区别
一. 运算符考点1. PHP的运算符的错误控制符@的使用及其作用 PHP支持一个错误控制符:@。当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。 2. 延伸:PHP所有运算符考点1) PHP运算符优先级(从高到
2020-07-05
  目录