检查项目是否存在于多个数组中

时间:2016-12-09 11:13:41

标签: php arrays

我有一个返回数组的函数:

这是功能:

{
    global $woocommerce;
    $items = $woocommerce->cart->get_cart();
    $product_names=array();
    foreach($items as $item => $values) { 
        $_product = $values['data']->post; 
        $product_names[]=$_product->post_title; 
}     

    $allproductname=print_r($product_names, true);
    return $allproductname;
}

此功能的输出:

Array(
[0] => Social media campagne    
[1] => Marketingcampagne
)

我还有2个名为group1和group2的数组。

$group1=array("Social media campagne","Marketingcampagne");

$group2=array("SEO","Facebook marketing");

现在我要检查的是,如果函数输出的两个值都属于$ group1,那么我希望它打印"这两个值都属于group1"

如果1个值属于group1,1个值属于组2,则echo" 1值属于group1,1个值属于group2"

- 修改

我忘了提到这个输出可能会改变它并不总是这样:

Array(
[0] => Social media campagne    
[1] => Marketingcampagne
)

它也可以是3个产品,例如

2 个答案:

答案 0 :(得分:1)

看起来你想要做的事与设定理论有关。你有一组东西(函数的返回),你想看看该数组中的所有元素是否都在另一个数组中(你想检查返回数组是否是你所依赖的数组的严格子集)检查)。

您可以使用array_intersect ()执行此操作。此函数至少使用2个数组作为参数,并返回传递给它的所有数组中存在的元素数组。

如果您有一个数组指定要检查的所有值,另一个数组可能是也可能不是该数组的子集,那么您可以使用array_intersect获取两个数组中所有元素的列表。如果输出中的元素数与要检查的数组中的元素数相匹配,则该数组必须是您要检查的数组的严格子集。

以下代码演示了基本原则:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    srand( time(NULL) );
    int number = (rand() % 9000)+1000;
    cout<<number<<endl;
}

注意:当被比较的数组的内容都是基本类型时,array_intersect才真正适合,因为PHP会在比较它们时将它们全部转换为字符串。如果您要比较数组或对象数组,那么最好使用array_uintersect ()并指定元素与回调函数进行比较的方式。

答案 1 :(得分:1)

将@GordonM中的array_intersect()应用于您的问题(似乎数组中只有字符串)。

首先从输出中获取group1

中的值
 $inGroup1 = array_intersect($ouput, $group1);
 $inGroup1Count = count($inGroup1);   // you can rewrite these two lines into one, 
                                      // if the actual matches are of no interest

如果这与$ output的计数相同,那么它的group1。如果没有,请检查group2中有多少。我想你可以自己编码。然后检查inGroup1Count和inGroup2Count是否都是&gt;比两组都好。

出于逻辑原因,您还应检查是否所有人都在第2组中。或者这是不可能的?

通过检查两个组,您可以创建类似

的输出
 echo $inGroup1Count.' value(s) belongs in group1 and '.$inGroup2Count.' value(s) belongs in group2';