案件不起作用

时间:2012-02-09 09:46:00

标签: php

所以这是代码 -

    $info = 0;
  switch ( $info ) {
    case ( $info < 11 ):
     $ts = "zero";
     break;
    case ( $info <= 44 && $info >= 11):
     $ts = "two";
     break;
    case ( $info > 44 ):
     $ts = "three";
     break;
   }

echo $ts;

它没有给出零,它给出了&#34;两个&#34;,也许你知道为什么?只有在$ info = 0时才会发生。

6 个答案:

答案 0 :(得分:12)

这是因为case expects a value,不是条件,并且在与switch参数进行比较之前,您提供的条件已转换为值。< / p>

$info为0:

$info < 11为真,因此给出了1。

$info <= 44 && $info >= 11为假,因此给出0。

$info > 44为假,因此给出0。

所以它匹配第一个情况,其中$info值0等于转换为数字的条件,这是第二个。这就是你看到"two"的原因。

我建议将其更改为if/else变体:

if ($info < 11) {
    $ts = "zero";
} elseif ($info >= 11 && $info <= 44) {
    $ts = "two";
} elseif ($info > 44) {
    $ts = "three";
}

或者可能更好,因为它删除了无关的检查,并确保始终分配某些值:

if ($info < 11) {
    $ts = "zero";
} elseif ($info < 45) {
    $ts = "two";
} else {
    $ts = "three";
}

答案 1 :(得分:1)

  • 您启用了$ info
  • ( $info < 11 )计算结果为true,它不等于$ info,即0,因此不采用此分支
  • ( $info <= 44 && $info >= 11)的计算结果为false,等于$ info(false == 0),因此采用此分支

答案 2 :(得分:0)

我认为case仅支持值而非逻辑语句。也就是说,您可以询问变量是否等于某个值......

switch ( $info ){
case 0:
// something
break;
case 11:
// something else
break;
default:
// otherwise
}

要实现您的目标,您需要使用IF-ELSE-IF控制结构

答案 3 :(得分:0)

来自手册:

  

switch语句类似于上面的一系列IF语句   同样的表达。在许多情况下,您可能想要比较相同的   变量(或表达式)具有许多不同的值,并执行a   不同的代码段取决于它等于的值。这是   正是switch语句的用途。

你的代码是相同的:

if($info == ($info < 11 )) {...} 
    elseif($info == ( $info <= 44 && $info >= 11)) {...} 
        elseif($info == ( $info > 44 )) {...} ...

但您的正确代码应为:“切换( true

    $info = 0;
  switch ( true ) {
    case ( $info < 11 ):
     $ts = "zero";
     break;
    case ( $info <= 44 && $info >= 11):
     $ts = "two";
     break;
    case ( $info > 44 ):
     $ts = "three";
     break;
   }

echo $ts;

或简单地说:

    $info = 0;
  switch ( true ) {
    case ( $info < 11 ):
     $ts = "zero";
     break;
    case ( $info <= 44 ):
     $ts = "two";
     break;
    default:
     $ts = "three";
   }

echo $ts;

答案 4 :(得分:0)

这是我的切换间隔功能:

function switchi($i,&$var,$case)
{
    foreach($case as $interval => $new_val)
    {
        if(is_int($interval) and $interval == $i)return $var = $new_val;
        if(strpos($interval,"-"))
        {
            $interval_array = explode("-",$interval);
            if($interval_array[0]<=$i and $i<=$interval_array[1])return $var = $new_val;
            if($interval_array[0]<=$i and !$interval_array[1])return $var = $new_val;
        }

    }
    if(array_key_exists('default',$case))return $var = $case['default'];
}

用法:

$pieces = 6;
switchi($pieces,$multiplier,array(
        1           =>60,
        2           =>35,
        3           =>30,
        4           =>25,
        5           =>22,
        "6-8"       =>20,
        "9-10"      =>18,
        "11-20"     =>15,
        "21-30"     =>14,
        "31-40"     =>13,
        "41-50"     =>12,
        "51-100"    =>11,
        "101-200"   =>10,
        "201-300"   =>9,
        "301-400"   =>8,
        "401-"      =>7,
        "default"   => 0,
    ));
    echo $multiplier; //20

答案 5 :(得分:0)

您需要以这种格式编写代码:

<?php
  $info = 0;
  //$info = 14;
  switch ( true) {
    case ( $info < 11 ):
     $ts = "zero";
     break;
    case ( $info <= 44 && $info >= 11):
     $ts = "two";
     break;
    case ( $info > 44 ):
     $ts = "three";
     break;
   }

echo $ts;
?>