PHP流程控制

221 阅读1分钟

遍历数组的三种方法及区别

  1. for

    for($i=0;$i<count($arr),$i++){
       echo $arr[$i];
    }

  2. foreach

    foreach($arr as $key=>$value){
       echo $key;
       echo $value;
    }

  3. while list each

    reset($arr);
    while(list($key,$value) = each($arr)){
       echo $key;
       echo $value;    
    }

区别:

for遍历循环索引数据,foreach跟while/list/each可以遍历索引、关联数组。each()实质就是使用返回当前指针的值current(),指针下移 next() ,当指钟超出数组范围,返回false。下一次遍历循环需要reset()把指针指向数组第一个元素。  在php7.2.X each已被废弃,建议做foreach

分支结构

if elseif ······   

一层层判断下来,只有一个代码块执行,排斥性。尽量把可能性较大的条件放前面。

if($status > 1){
  ······
}elseif( 0<$status<1){
  ······
}else{
  ·····
}

switch 

效率比if elseif高,因为直接生成索引,不需要一步步判断

case值可使用整型、浮点型、字符串

常见bug

1、switch非严格匹配,自动转换类型

switch($str){
   case 'hello':
        echo 'hello';
        break
   case 0 :
       echo 0;
       break;
   default:
       echo 'haha';
}
//假如$str = 0 ;最后输出的为hello,而不是0

2、case 表达式的值,而不是判断表达式是否成立

swithc($num){
    case $num >= 0:
       echo 0;
       break;
    case $num >10:
       echo 1:
       break;
    default:
       echo 2;
}
//$a=0时,输出的结果为1.因为第一个表达式为true,true就是1。第二表达式false 就是0