首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP开关只显示第一种情况的结果

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

Stack Overflow用户
提问于 2013-12-12 17:26:10
回答 3查看 559关注 0票数 1

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

代码语言:javascript
复制
$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;

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-12 17:45:19

如果你使用得当,真开关就会起作用。试试这个:

代码语言:javascript
复制
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)方法的有趣链接

票数 -1
EN

Stack Overflow用户

发布于 2013-12-12 17:39:28

您不应该使用开关与真,这意味着唯一适用的大小写是第一个计算为真或没有值!

你想做的是:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-12-12 17:56:36

是的,它总是运行第一个大小写,即使你重新排列大小写,它也会运行第一个大小写,因为你的开关大小写编码是不正确的。为了前夫。如果用户选择第三次下拉,则在、$model、和其他变量中将值设置为空值,但在编码情况下,总是显示为$stocktype设置为null,但也满足条件。根据我的看法,你必须尝试:

代码语言:javascript
复制
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:

} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20550101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档