我有一个返回数组的函数:
这是功能:
{
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个产品,例如
答案 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';