php多个if语句?

时间:2012-04-27 14:05:21

标签: php

这看起来像是一个菜鸟问题,对不起。我今天早上无法工作。

我正在尝试执行多个if语句,但它们表现不正常。它似乎总是在找到它正在寻找的模板之后加载最少的模板。 做这样的事情的最佳方式是什么:

$post = $wp_query->post;
if ( in_category('7') ) {include(TEMPLATEPATH . '/post-experts.php');}
if ( in_category('6') ) {include(TEMPLATEPATH . '/post-radio.php');}
if ( in_category('5') ) {include(TEMPLATEPATH . '/post-lifestyle.php');}
else {include(TEMPLATEPATH . '/singleorigional.php');
}

example

5 个答案:

答案 0 :(得分:7)

你很可能想为第2和第3 ifs做else if或者有办法知道是否都没有,做else语句

答案 1 :(得分:3)

我认为你的问题是If语句是独立的。如果你有类别的数组,请尝试使用switch语句,或者如果你只有一个think返回boolean的in_category函数,那么使用elseif语句,例如:

if (in_category(7)){...}
elseif (in_category(6)){...}
elseif (in_category(5)){...}
else {
...
}

答案 2 :(得分:2)

我的假设是,无论你正在寻找什么“in_category”都可以在多个类别中找到 - 因此,如果阻止,则不会长。试试这个:

简明版

$post = $wp_query->post;
$found = false;
if ( in_category('7') ) { include(TEMPLATEPATH . '/post-experts.php'); $found = true; }
if ( in_category('6') ) {include(TEMPLATEPATH . '/post-radio.php'); $found = true; }
if ( in_category('5') ) {include(TEMPLATEPATH . '/post-lifestyle.php'); $found = true; }
if(!$found) include(TEMPLATEPATH . '/singleorigional.php');

更易于阅读/理解的版本:

$post = $wp_query->post;
$found = false;
if ( in_category('7') ) {
    include(TEMPLATEPATH . '/post-experts.php');
    $found = true;
}
if ( in_category('6') ) {
    include(TEMPLATEPATH . '/post-radio.php');
    $found = true;
}
if ( in_category('5') ) {
    include(TEMPLATEPATH . '/post-lifestyle.php');
    $found = true;
}
if(!$found) include(TEMPLATEPATH . '/singleorigional.php');

或 - 如果只能在一个类别中找到:

$post = $wp_query->post;
if ( in_category('7') ) {
    include(TEMPLATEPATH . '/post-experts.php');
} else if ( in_category('6') ) {
    include(TEMPLATEPATH . '/post-radio.php');
} else if ( in_category('5') ) {
    include(TEMPLATEPATH . '/post-lifestyle.php');
} else {
    include(TEMPLATEPATH . '/singleorigional.php');
}

答案 3 :(得分:2)

为了提高效率,你最好使用switch语句,然后抓住你在案例中找不到的那些语句,你可以使用默认语句。

switch(in_category){ //Begin switch statement.
case '7': //Check if it equals 7
include(TEMPLATEPATH . '/post-experts.php'); //Include our PHP code
break; //End this current condition.
case '6': //Check if it equals 6
include(TEMPLATEPATH . '/post-radio.php'); //Include our PHP code
break; //End this current condition.
case '5': //Check if it equals 5
include(TEMPLATEPATH . '/post-lifestyle.php'); //Include our PHP code
break; //End this current condition.

default: //If none of the above cases are found, do this.
include(TEMPLATEPATH . '/singleorigional.php'); //Include our PHP code
break; //End this current condition.   
}

编辑:我决定稍后再回到此处,以便更好地解释为什么这样做会更好。

if else组合意味着订单。例如。

if(thingy == "thing1"){
//Do one thing
}
elseif(thingy == "thing2"){
//Do another thing
} 
elseif(thingy == "thing3"){
//Do a different thing
}
else{
//Catch anything
}

有了这个,就意味着它会检查第一个条件,如果是= = thing1,如果没有,检查它是否等于下一个条件是thing == thing2,依此类推。如果你通常总是期待thing1,那么这可能没问题,因为你只是抓住了其他一些东西。但是,实际上,在达到所需的解决方案之前检查所有可能的条件是低效的。

相反,通过编写等效的switch语句:

switch(thingy){
case "thing1":
//Do one thing
break;
case "thing2":
//Do another thing
break;
case "thing3":
//Do a different thing
break;
default:
//Catch anything
break; //Break is not needed if default is the final case.
}

这样做的目的是首先抓住答案,例如thing ==“thing3”,然后它会跳过其他不相关的情况,而只是做它需要做的事情。它不使用订单,而是有点像指向正确的答案。因此,如果您的实际答案是第一个案例,或者第一个案例,那么它只会做相关的事情并不重要。

总而言之:如果你使用了一个开关,并且你的回答案例是第100个案例,它将指向在找到该开关(答案)后要做什么,如果你要使用ifelse并且你的答案是ifelse的第100个变体,它必须在执行它需要做的事情之前迭代99个其他无意义的检查。

答案 4 :(得分:0)

正如@thantos所说,包括if语句。

编辑:WordPress告诉我它需要in_category函数的第二个参数,即$ post变量;我编辑了我的回复以匹配它。

示例:

$post = $wp_query->post;
if (in_category('7', $post)) {
    include(TEMPLATEPATH . '/post-experts.php');
}
else if (in_category('6', $post)) {
    include(TEMPLATEPATH . '/post-radio.php');
}
else if (in_category('5', $post)) {
    include(TEMPLATEPATH . '/post-lifestyle.php');
}
else {
    include(TEMPLATEPATH . '/singleorigional.php');
}