如果在php中声明问题

时间:2009-12-16 19:51:36

标签: php

我有一个if语句需要检查是否存在一系列项目以及是否存在任何其他项目。

所以例如

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,加上任何其他数字......

4 个答案:

答案 0 :(得分:4)

如果您提问的话 “我有一个id列表,我想知道一个是否存在,除此之外,如果存在其他项目”,可以采取以下措施:

  • 如果您查找的项目存在,请将其从阵列中删除,并检查它是否仍有任何成员
    • if count(array) is > 0 do this; else do that;
  • 其他不存在或者'独自'。

这个操作过程非常优化:例如,您的原始数组在每次迭代时都会丢失成员。如果你不关心数组包含哪些成员,那么一个简单的改变就是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
}

答案 1 :(得分: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中没有值,则结果为空。

使用array(4,5)测试存在除4和5之外的其他值的差异,因为如果在$id_cart中没有值但是4或5,则结果将为空。

使用count()来测试非空数组是不必要的。在数据条件中,空数组的计算结果为false


Re Adriano关于简单性或效率的评论:PHP这种方式很棘手。有些函数比其他函数更有效,所以很难说2个函数调用优于3.我尝试运行我的解决方案和Adriano,并使用microtime()测量已用时间:

  • Bill的解决方案:100000次迭代的6.25秒
  • Adriano的解决方案:10万次迭代5.59秒

所以他们不平等,但阿德里亚诺的速度只提高了10.5%。足够接近我选择一个可读性的解决方案,而不是性能。如果最佳性能是最高优先级,那么首先不会使用PHP。 : - )

FWIW,Adriano使用foreach的其他解决方案在100000次迭代中花费了7.13秒。

答案 2 :(得分:1)

这将找到不是4或5的项目

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

这将找到键不是4或5的项目

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

答案 3 :(得分:0)

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

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