PHP开关仅显示第一种情况的结果

时间:2013-12-12 17:26:11

标签: php switch-statement

我在搜索表单中有三个下拉列表。如果只选择了一个下拉选项,我想显示结果。现在,搜索仅适用于第一个下拉框选择(在示例中,它是$ StockType)。如果我在第二个或第三个下拉列表中仅选择一个选项,则不会显示任何结果。这是我的开关声明:

$StockType = $_GET['StockType'];
$make = $_GET['Make'];
$model = $_GET['Model'];


switch (true) {

    case ($StockType):
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

        $args = array(
            'post_type' => 'vehicle',
            'paged' => $paged,
            'posts_per_page' => 15,
            'meta_key' => 'StockType', 
            'meta_value' => $StockType
        );
        break;

    case ($make):
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

        $args = array(
            'post_type' => 'vehicle',
            'paged' => $paged,
            'posts_per_page' => 15,
            'meta_key' => 'Make', 
            'meta_value' => $Make
        );
        break;

    case ($model):
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

        $args = array(
            'post_type' => 'vehicle',
            'paged' => $paged,
            'posts_per_page' => 15,
            'meta_key' => 'Model', 
            'meta_value' => $model
        );
        break;

}

3 个答案:

答案 0 :(得分:2)

你永远不应该将switch与true一起使用,这意味着唯一适用的案例是第一个评估为true或没有值的案例!

你想要做的是:

switch($value){
    case 'value 1': 
        doSomething();
        break;
    case 'value 2': 
        doSomething();
        break;
    case 'value 3': 
        doSomething();
        break;
}

查看有关PHP中类型杂耍的文章,以更深入的方式理解您的问题:http://www.php.net/manual/en/language.types.type-juggling.php

答案 1 :(得分:0)

是即使您重新安排案例顺序,它总是运行第一种情况,然后它也将运行第一种情况,因为您的开关案例编码不正确。 对于前者如果用户选择第三个下拉菜单,则在 $ model 中设置一个值,将其他变量设置为 NULL 值,但在您的编码情况下,它始终显示为第一个案例为 $ stocktype 设置为null但它也满足条件。根据我的观点,你必须尝试:

if($_GET['stocktype']!=''){
$yourvalue=$_GET['stocktype'];
}
elseif($_GET['model']!=''){
$yourvalue=$_GET['model'];
}
elseif($_GET['make']!=''){
$yourvalue=$_GET['make'];
}
switch($yourvalue){
case 'stocktype':
//your code
break;
case 'make':
//your code
break;
case 'mode;':
//your code
break;
default:

} 

答案 2 :(得分:-1)

如果使用正确,切换为true将起作用。试试这个:

switch (true) {

case ( !empty($_GET['StockType']) ):
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'post_type' => 'vehicle',
        'paged' => $paged,
        'posts_per_page' => 15,
        'meta_key' => 'StockType', 
        'meta_value' => $StockType
    );
    break;

case ( !empty($_GET['Make']) ):
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'post_type' => 'vehicle',
        'paged' => $paged,
        'posts_per_page' => 15,
        'meta_key' => 'Make', 
        'meta_value' => $make
    );
    break;

case ( !empty($_GET['Model']) ):
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'post_type' => 'vehicle',
        'paged' => $paged,
        'posts_per_page' => 15,
        'meta_key' => 'Model', 
        'meta_value' => $model
    );
    break;
}

Interesting link about the switch(true) method