我有一个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,加上任何其他数字......
答案 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";
}
测试:
请参阅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()
测量已用时间:
所以他们不平等,但阿德里亚诺的速度只提高了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()。