第十二节:控制结构-foreach-break-continue-switch
foreach 值得注意的是两个例子
一.是可变变量 可以很方便的遍历POST数组
1 <?php 2 $arr=array('banana','orange','appale','pear','grape'); 3 foreach($arr as $value): 4 $$value=$value; 5 //var_dump($$value); 6 endforeach; 7 $_POST=array('name'=>'Tom','password'=>'123','email'=>'2323@qq.com'); 8 foreach($_POST as $key=>$value): 9 $$key=$value; 10 endforeach; 11 echo $name.$passwprd.$email; 12 ?>
二 是引用操作符变量数组
1 <?php 2 $fruit=array('orange','apple','pear','grape'); 3 foreach($fruit as &$value): 4 $value=strtoupper($value); 5 endforeach; 6 //此处注意 因为使用了引用操作符 而$value随着数组指针移动其实到了 最后 $value就是数组最后一个值的变量, 7 //如果它改变数组最好一个值也会改变所以,为了避免误操作最好 8 unset($value);//目前理解 这个unset()语句(他不是函数) 就是释放变量和内存的关联 9 $value='car'; 10 var_dump($fruit); 11 ?>
break和continue定义就不说了 注意一点 他们可以跳出多重循环
break的例子
1 <?php 2 $i=0; 3 while(++$i): 4 switch($i): 5 case 5: 6 $color='red'; 7 break 1; 8 case 10; 9 break 2; 10 default: 11 unset($color); 12 endswitch; 13 echo <<<EOT 14 <font color="$color">10000</font><br/> 15 EOT; 16 endwhile; 17 ?>
效果如图:
在手册中关于break和continue 还提到了一个特殊的遍历数组方式
1 <?php 2 $arr=array('red','blue','yellow','black'); 3 //将数值指针复位 指向第一个元素 4 reset($arr); 5 //list()将对面数值的键值分别付给括号中的变量,each将数值当期指针所指向的元素 键值和键名作为一个数组返回 6 while(list($key,$value)=each($arr)): 7 if($value=='red'): 8 $color='red'; 9 else: 10 $color='black'; 11 endif; 12 echo "<font color=\"$color\">$value</font><br/>"; 13 endwhile; 14 ?>
关于switch,看这个例子
1 <?php 2 switch ($i=1): 3 case 2: 4 echo 2; 5 break ; 6 case 1: 7 echo 1; 8 case 3: 9 echo 3; 10 endswitch; 11 ?>
输出结果是1和3 为什么会这样呢?这就牵扯到了switch的执行方式,
switch是一行接1行的执行。开始没有代码执行。仅当一个case语句中的值和switch表达式的值匹配时PHP才开始执行语句,直到遇到第一个break或continue,否则他讲不在会匹配case,而直接执行下面所有case中的语句。甚至包括defualt的内容。(其实是有点不智能,浪费代码)
另外 case表达式只能是简单的类型表达式,即整型和浮点型以及字符串,不能是数组和对象。