Switch case 传值为0,和预想结果不同。
function step3($x){ $score = 0; switch ($x){ case $x>=0 && $x<=50: $score = 50; break; case $x>50 && $x<=100: $score = 40; break; case $x>100 && $x<=200: $score = 30; break; case $x>200 && $x<=300: $score = 20; break; case $x>300 && $x<=500: $score = 10; break; default: $score = 0; } return $score; }
当$x 传入为0时,得到的结果40,有些郁闷,后面分析原因才发现:
在执行case之前switch会先判断$x的值,当$x等于0的时候就把$x看成是false,之后才到case判断哪个条件是false,就进入那个。
知道原因后,修改代码:
function step3($x){ $score = 0; switch (TRUE){ case $x>=0 && $x<=50: echo 22; $score = 50; break; case $x>50 && $x<=100: $score = 40; break; case $x>100 && $x<=200: $score = 30; break; case $x>200 && $x<=300: $score = 20; break; case $x>300 && $x<=500: $score = 10; break; default: $score = 0; } return $score; }