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


PHP switch only shows results of first case

我在一个搜索表单中有三个下拉列表。如果只选择一个下拉选项,我想显示结果。现在,搜索只适用于第一个下拉框选择(在本例中,它是$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;
}

永远不要将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

yes它总是运行第一个case,即使您重新排列了case顺序,它也会运行第一个case,因为您的switch case编码不正确。例如,如果用户选择第三个下拉菜单,则在$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:
} 

如果使用得当,切换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;
}

关于切换(true)方法的有趣链接

相关文章: