如果语句问题在php
我有一个if语句需要检查是否存在一系列的项目以及是否存在任何其他项目。如果语句问题在php
因此,例如
foreach($id_cart as $id) {
if(($id == 4 || $id == 5) && **IF ANY OTHER ITEM EXISTS**){
echo "Yes";
}
是否有这样做的一个简单的方法? 项目存在或不存在。 $ id_cart会有,比方说,ID:4,5,6,8,12,14 没有其他东西存储。因此,如果4或5都在那里,再加上其他任何数量的...
如果您的问题是要求 “我有一个ID列表,我想知道它是否在那里,除此之外,如果存在其他项目”,则一个操作过程可能如下:
- ,如果你寻找存在的项目,从数组中取出,并检查它是否仍然有任何成员
if count(array) is > 0 do this; else do that;
- 否则是不存在或者是“阿龙E”。
这个过程是非常优化的:例如,你的原始数组在每次迭代时都会失去成员。如果您不关心数组中包含哪些成员,则只需执行count(array) - 1
即可。
也许这你想要做什么:
foreach ($id_cart as $id) {
if (($id == 4 || $id == 5) && count(array_diff($id_cart, array(4, 5)))) {
// do something
}
}
,或者更好:
if ((in_array(4, $id_cart) || in_array(5, $id_cart)) && count(array_diff($id_cart, array(4, 5)))) {
// four or five exists, while other elements are also in the array
// do something
}
最后一批代码很好。 – 2009-12-16 20:41:32
这将查找不4或5
$others = array_diff($id_cart, array(4, 5));
这将查找其键不是4或5
项目$others = array_diff_key($id_cart, array_flip(array(4, 5)));
一个有效的方法是将ID存储在数组的键中并使用isset()检查它们的存在。
PHP的数组是字典。 利用此功能,而不是浪费时间in_array()。
参见http://php.net/array_flip – 2009-12-16 20:33:09
<?php
$a = array(4, 5);
if (array_intersect($id_cart, $a) && array_diff($id_cart, $a))
{
echo "Yes\n";
} else {
echo "No\n";
}
测试:
- 4,5:没有
- 4, 6:是的
- 5,6:是
- 6,8:没有
- 4,5,6,8,12,14:是
见array_intersect()
和array_diff()
。
与array(4,5)
相交测试是否存在4或5,因为如果$id_cart
中没有出现任何值,结果将为空。
Diff与array(4,5)
测试除了4和5之外是否存在另一个值,因为如果在$id_cart
中没有发生值但是4或5的结果,则结果将为空。使用count()
来测试非空数组是不必要的。在一个条件下,一个空数组的计算结果为false
。
Re Adriano关于简单性或效率的评论:这样PHP很棘手。有些功能比其他人更有效,所以很难说2函数调用优于3.我试图同时运行我的解决方案和阿德里亚诺的,并使用microtime()
测量经过时间:
- 比尔的解决方案:6.25秒100000迭代
- 阿德里亚诺的解决方案:5.59秒100000次迭代
因此,他们不相等,但阿德里亚诺的只有10.5%的速度。足够接近,我会选择一个可读性而不是性能的解决方案。如果最佳性能是最高优先级,那么首先不会使用PHP。 :-)
FWIW,使用foreach
的Adriano的其他解决方案花了7.13秒100000次迭代。
两个函数调用,而不是(可能)3在我的情况,好。代码仍然是自我记录。虽然我会创建一个变量来表示数组(4,5)。 – 2009-12-16 22:29:40
使用数组变量的良好调用。它在我的测试中确实加快了两种解决方案的速度。我会在上面编辑我的帖子。 – 2009-12-16 23:07:52
我们必须知道如何将项目定义为“现有”。 – ryeguy 2009-12-16 19:52:36