2009-12-16 80 views
0

我有一个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都在那里,再加上其他任何数量的...

+1

我们必须知道如何将项目定义为“现有”。 – ryeguy 2009-12-16 19:52:36

回答

4

如果您的问题是要求 “我有一个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 
} 
+0

最后一批代码很好。 – 2009-12-16 20:41:32

1

这将查找不4或5

$others = array_diff($id_cart, array(4, 5)); 

这将查找其键不是4或5

项目
$others = array_diff_key($id_cart, array_flip(array(4, 5))); 
0

一个有效的方法是将ID存储在数组的键中并使用isset()检查它们的存在。

PHP的数组是字典。 利用此功能,而不是浪费时间in_array()。

+0

参见http://php.net/array_flip – 2009-12-16 20:33:09

4
<?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次迭代。

+0

两个函数调用,而不是(可能)3在我的情况,好。代码仍然是自我记录。虽然我会创建一个变量来表示数组(4,5)。 – 2009-12-16 22:29:40

+0

使用数组变量的良好调用。它在我的测试中确实加快了两种解决方案的速度。我会在上面编辑我的帖子。 – 2009-12-16 23:07:52