PHP开关仅显示第一种情况的结果
我在搜索表单中有三个下拉列表。如果只选择了一个下拉选项,我想显示结果。现在,搜索只适用于第一个下拉框选择(在本例中,它是$StockType)。如果在第二个或第三个下拉列表中仅选择一个选项,则不会显示任何结果。这是我的交换声明:PHP开关仅显示第一种情况的结果,php,switch-statement,Php,Switch Statement,我在搜索表单中有三个下拉列表。如果只选择了一个下拉选项,我想显示结果。现在,搜索只适用于第一个下拉框选择(在本例中,它是$StockType)。如果在第二个或第三个下拉列表中仅选择一个选项,则不会显示任何结果。这是我的交换声明: $StockType = $_GET['StockType']; $make = $_GET['Make']; $model = $_GET['Model']; switch (true) { case ($StockType): $pag
$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中的类型转换的文章,以更深入地了解您的问题:您不应该将switch与true一起使用,这意味着唯一适用的情况是第一个计算结果为true或没有值的情况 您想做的是:
switch($value){
case 'value 1':
doSomething();
break;
case 'value 2':
doSomething();
break;
case 'value 3':
doSomething();
break;
}
请阅读关于PHP中的类型转换的文章,以更深入地了解您的问题:如果正确使用,Switch 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将起作用。试试这个:
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;
}
是的,它始终运行第一个案例,即使您重新排列案例顺序,它也将运行第一个案例,因为您的开关案例编码不正确。 例如,如果用户选择第三个下拉列表,则在$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:
}
是的,它总是运行第一个案例,即使您重新排列案例顺序,它也会运行第一个案例,因为您的开关案例编码不正确。 例如,如果用户选择第三个下拉列表,则在$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:
}
第一次看到switch(true){}时,我建议使用
var\u dump($\u GET)
查看您得到的值是什么。它看起来像$\u GET['StockType']
总是被设置为某个值。Charaf jra,你能解释一下这有什么问题吗?@user715564-我已经使用PHP很长时间了,我以前从未见过它以这种方式使用;但是PHP文档页面说,找到第一个有值的变量是一个简洁的快捷方式。基本上在PHP中,switch(a)…case(b)只是测试(a==b)。第一次看到switch(true){}时,我建议使用var\u dump($\u GET)
来查看您得到的值是什么。它看起来像$\u GET['StockType']
总是被设置为某个值。Charaf jra,你能解释一下这有什么问题吗?@user715564-我已经使用PHP很长时间了,我以前从未见过它以这种方式使用;但是PHP文档页面说,找到第一个有值的变量是一个简洁的快捷方式。基本上在PHP中,switch(a)…case(b)只是测试(a==b)。所以你可以用它玩各种奇怪的把戏。当然可以,但是如果你要这么做,为什么还要用开关呢?只需使用普通的旧if
语句并删除嵌套级别。@IanMcLaird确实没有理由。也许两种方式都没有太大区别。可能更喜欢箱子的外观。实际上,如果你想让一些案例相互渗透,这可能很有用。这段代码闻起来很难闻,你必须仔细阅读才能理解这里要实现的目标,不要用这种方式切换,而是使用if语句!在大多数情况下,我只是想让它工作:)不管怎样,您的解决方案都会有所帮助。看起来问题出在我的URL结构中。当我提交一个只选择一个选项的搜索时,URL仍然包含每个变量,例如/?s=&StockType=&Make=CHEVROLET&Model=&post_-type=vehicle@user715564试试看!empty()而不是isset(),这应该可以正常工作,但如果要这样做,为什么还要使用开关呢?只需使用普通的旧if
语句并删除嵌套级别。@IanMcLaird确实没有理由。也许两种方式都没有太大区别。可能更喜欢箱子的外观。实际上,如果你想让一些案例相互渗透,这可能很有用。这段代码闻起来很难闻,你必须仔细阅读才能理解这里要实现的目标,不要用这种方式切换,而是使用if语句!在大多数情况下,我只是想让它工作:)不管怎样,您的解决方案都会有所帮助。看起来问题出在我的URL结构中。当我提交一个只选择一个选项的搜索时,URL仍然包含每个变量,例如/?s=&StockType=&Make=CHEVROLET&Model=&post_-type=vehicle@user715564试试看!empty()而不是isset(),应该可以