首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >合并数组,因此它们只包含经常性的值。

合并数组,因此它们只包含经常性的值。
EN

Stack Overflow用户
提问于 2015-07-14 13:59:53
回答 1查看 51关注 0票数 1

我们正在升级一个网店,所以过滤有点不同。现在,我们只需获得与一个或多个选定筛选值相关的所有产品ID。

代码语言:javascript
代码运行次数:0
运行
复制
//Filter value '8 GB'
$result[] = array(1,6,5,8,9);

//Filter value 'AMD E' (and)OR 'INTEL'
$result[] = array(1,5,8,9,10,500,502,503,600,607,608,...);

'AMD E‘和' INTEL’值是来自同一个过滤器‘处理器’,所以我们希望这些组合,因为访问者希望有一个AMD E或英特尔处理器的所有产品。

现在,我们只想选择出现在两个数组中的ID,我们已经尝试了许多方法,但到目前为止,它只是没有返回我们在任何atempt中所期望的结果。

问题是,=>中的键$result数组对的数量是动态的,就像SQL返回的ID数一样。当$result中的第一个数组是ID的简短列表时,当$result中有多个数组时,array_intersect()将不会返回所有预期结果。

merge_array()会把所有的东西组合在一起。因此,访问者将看到所有产品,其中有8GB的内存,或包含一个AMD E或英特尔处理器。

我们正在寻找一个(‘8GB’)和('ADM E‘或’英特尔‘)解决方案。

当更多的过滤器被激活时,事情变得复杂起来:(‘8GB’或'12 GB')和('ADM E‘或'INTEL')和('HP’或'Apple‘或’索尼‘)

(希望我没有失去你,试图解释一下情况和我们现在要做什么:s)

我们还尝试通过SQL完成一些工作。就像你可以在这个问题里读到的一样,没有任何运气。

以前有人处理过这种事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-14 14:05:44

据我所知,您希望有一个两步的过程:

  1. 查找与给定筛选器组中的任何条件匹配的所有项。
  2. 查找在所有使用的筛选器组中返回的项。

在第一步中,您需要找到与所选选项匹配的产品。例如,如果用户搜索具有任何选项A、B或C的产品,则将结果放入如下数组:

代码语言:javascript
代码运行次数:0
运行
复制
$results = [
 [1,2,3], // products that have option A
 [2,5,7], // products that have option B,
 [2,7,10] // products that have option C
];

现在,您可以使用以下方法获取所有具有这些选项的产品的ID

代码语言:javascript
代码运行次数:0
运行
复制
$ids = call_user_func_array('array_merge', $results);

这将给出数组的和。

您必须对用户选择的每个筛选器组执行此操作,然后您将得到另一个数组数组,现在您需要对该数组执行交叉操作:

代码语言:javascript
代码运行次数:0
运行
复制
$result = [
  $ids1, // array of IDs that match ANY option from filter group 1
  $ids2  // array of IDs that match ANY option from filter group 2
];

您可以通过调用:

代码语言:javascript
代码运行次数:0
运行
复制
$ids = call_user_func_array('array_intersect', $results);

这将为您提供与所有选定筛选组中的任何筛选器选项匹配的产品in。

您最不需要的是检查用户是否选择了任何过滤器。如果没有,请不要应用上述逻辑,而是返回所有产品。

我希望它有帮助:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31408847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档