PHP: Simplify multiple || operator statements into one?
Possible Duplicate:
php if statement with multiple conditions
我有这个代码:
if(x==1 || x==2 || x==3 || x==4 )
有没有简单地说短一点?例如:
if(x==1||2||3||4 )
如果x=1、2、3或4,说明为真?
提前谢谢。
编辑:(感谢所有回复,这里有一些澄清)
我有一个while循环,但只希望调用特定的数据库条目。我的代码是最新的
1 2 3 4 5 6 7 8 9 10 11 12
| <?php while(the_repeater_field('team_members','options') && get_sub_field('member_sort') == 1 : ?>
<img src="<?php the_sub_field('image'); ?>" alt="" />
<p>
<?php the_sub_field('info'); ?>
<br />
"><?php the_sub_field('email'); ?>
</p>
<?php endwhile; ?> |
现在它完全适用于==1,但我也希望显示2,3,4。我只是不知道该如何让代码执行1 2 3 4
更新2:
好吧,所以我用了下面的代码,但我猜我用的是错误的方式。以下代码只显示等于1的记录。但记录不等于2,3,4…我猜是因为while循环只运行一次,因为语句立即变为真。
1 2 3 4 5 6 7 8 9 10 11 12
| <?php while(the_repeater_field ('team_members','options') && in_array(get_sub_field ('member_sort'),array(1,2,3,4))): ?>
<img src ="<?php the_sub_field('image'); ?>" alt ="" />
<p >
<?php the_sub_field ('info'); ?>
<br />
"><?php the_sub_field('email'); ?>
</p>
<?php endwhile; ?> |
- 较长的代码有什么问题?你想解决什么问题?在你的情况下,一份switch声明有效吗?
- @我更新了我的问题。@马里奥,谢谢你的链接。
或者,即使:
这个问题很好,但有一点我认为进化的问题是现在的,你想要的所有的环在自由价值的东西但只有在一定的条件下。你可以使用在当前的大continue项声明abort iteration和移动在大一之后立即。
1 2 3 4 5 6
| <?php while (the_repeater_field ('team_members','options')) : ?>
<?php if (!in_array(get_sub_field ('member_sort'), array(1,2,3,4))) continue; ?>
... do stuff
<?php endwhile; ?> |
- 然而,in-array很慢-请参见:us3.php.net/manual/en/function.in-array.php 93880
- 嗯,我认为测距仪是没有意义的…可以做EDOCX1[0]
- @Damianb运行这行代码需要多少次?如果你的回答小于10,我怀疑你会注意到。
- @不可避免的是,靶场的使用是相当有限的,但在某些情况下,它是非常有用的。例如,如果需要匹配字母字符,也可以执行range('a', 'd'),或者执行range(2, 10, 2)以仅匹配偶数2-10。
- 这可能有效,我只是想确保这是最有效的方法。我更新了我的问题以便更详细地解释。我还计划运行类似的代码,但结果却相反…意思!1=2×3×4
- 然后,当然,您将使用!in_array(...)。但是你在说什么效率呢?使用的击键次数或代码执行速度方面的效率?为了最快地执行,您应该使用这样的方法:if(x==1 || x==2 || x==3 || x==4 ),但要按照最不可能为真的顺序进行比较。但请注意提前优化。
- @Okonomiyaki3000谢谢你的回复。我会把if语句放在上面发布的while循环中吗?我想让我困惑的是我知道如何做x==1 x==3 x==3,但不知道如何在y==z&;x==1 x==3 x==3….的混合中使用&;&;operator。这就是我输入代码的顺序吗?
- @达曼,如果你的情况开始看起来很复杂,你一眼就不容易理解,你最好把它和()分开。但你真正的意思是什么?(y==Z && x==1) || x==3 || ...不同于y==Z && (x==1 || x==2 || ...),如果它看起来很难看,即使在那之后,你也可以考虑打断多个if语句。不要耽误效率。以您能理解的方式编写代码。
- @Okonomiyaki3000再次感谢您的回复…我相信下面的工作y==z&;&;(x==1 x==2…)…但是我想我做的不对,因为我期望while循环运行来显示每个1,2,3,4的记录,但是它在1处停止,因为语句是真的。我更新了我的问题。
- 不知道the_repeater_field和get_sub_field应该返回什么,我想我没什么帮助。
- 再次感谢您的回复,哈哈。我想我的错误在while循环中。我只需要为每一个真实的陈述运行它,但我想这可能是一个不同的问题:(。
- 实际上,为了简化它……我只需要每次语句为真时运行while语句…因此,如果x==1为真,那么运行并重复,如果x==2也是真的。然后运行并重复,查看x==3是否为真。然后跑。
- 我想我看到了问题所在。While将循环,直到条件为false时退出。我认为如果当前迭代是错误的,您只想跳过它,继续下一个迭代,对吗?
- 是的:)这正是我想做的。基本上我有20个数据库条目,其中只有4个在"成员排序"字段中有值(值为1,2,3,4)。我想用'member_sort'==1,'member_sort'==2等打印出数据库条目…代码"get_sub_field('member_sort')"只是从数据库条目中获取"member_sort"值,这就是我获取1、2、3、4的方式。它不是数组。
- 为什么不把WHERE member_sort IN(1,2,3,4)添加到查询中,这样您就只得到您想要的行?
- 它是一个来自WordPress插件(advancedCustomFields.com/docs/field-types/repeater)的函数,我不知道如何使用SQL查询来处理它。我的知识有点有限,但是你的解决方案工作得很好!它显示了我需要的4个。现在试着找出如何按1、2、3、4的顺序对其进行排序。非常感谢你!!
如果你是使用PHP 5.4 +,你可以做这个:
否则,它是:
- 但是in-array很慢,应该谨慎使用;请参见:us3.php.net/manual/en/function.in-array.php 93880
- @Damianb我认为注释是错误的,因为构建关联索引需要很多时间。此外,它不会与OR语句进行比较。但我也同意,在ou数组中,速度可能会慢一点。但只有一点点。
- 或多或少,使用简单的变量,是的;当您开始进入对象时,它开始产生巨大的差异。
- 如果我在php 5.4+中使用了第二个选项,那么与使用第一个选项相比,性能有什么不同吗?只是好奇它是不同还是相同。
- @达曼在技术上是一样的。任何性能差异都将严格取决于两个版本的内部工作。无论哪种情况,它都是最小的。
这取决于你有多少,以及是否有可能在其他条件,但无论是一个switch:
1 2 3 4 5 6 7 8 9
| switch(x) {
case 1:
case 2:
case 3:
case 4:
break;
default:
// Do stuff
} |
阵列或安全,尤其是对于许多items:
- 感谢您抽出时间回答。我不知道如何实现切换案例来使用上面的代码,也不知道这是否是我应该走的路线。
- @达曼:你的意思是用非来实现它?这里,我已经更新了它。
有没有方法。由arrays只使用。