如何获取出现在 1 个以上数组中的所有值?
Posted
技术标签:
【中文标题】如何获取出现在 1 个以上数组中的所有值?【英文标题】:How can I get all values, which occur in more than 1 array? 【发布时间】:2015-08-01 13:51:43 【问题描述】:是否可以在 php 中交叉检查所有匹配的数组并将结果存储到数组中?我找到了`array_intersect(),但是这个函数只返回第一个数组的结果。并且仅当该值存在于所有数组中时。
示例输入:
Array 1 = 1,2,3
Array 2 = 4,5,6
Array 3 = 6,7,8
Array 4 = 3,9,10
现在我需要一个可以返回任何匹配项的数组。在此示例中,它将是:
result = 3,6
因为“3”在数组1和数组4中,结果“6”在数组2和数组3中。
在多个数组中的任何匹配。有什么提示/想法吗?
【问题讨论】:
你是怎么得出这个结果的? 所以只要 1 个值在 2 个数组中,您希望它在结果数组中吗? 已编辑。它是否可能是一种解决方案,可以将所有产品进行交叉乘积,然后获得不止一次洞察的数字? @Rizier123:是的。完全正确。array_intersect
,而不是array_interselect
。
@Luca FYI:您可以接受对您帮助最大并解决了您的问题的答案(meta.stackexchange.com/q/5234)
【参考方案1】:
这应该适合你:
首先,您使用array_unique()
从每个数组中获取所有唯一值。然后用array_merge()
将它们合并到一个数组中,并用array_count_values()
计算所有值。
在此之后,您只需使用array_filter()
过滤掉所有值,这些值不超过 1 个数组,您就会得到预期的结果。
要翻转数组,只需使用array_keys()
。
<?php
$count = array_count_values(array_merge(array_unique($arr1), array_unique($arr2), array_unique($arr3), array_unique($arr4)));
$result = array_keys(array_filter($count, function($v)
return $v >= 2;
));
print_r($result);
?>
输出:
Array
(
[0] => 3
[1] => 6
)
【讨论】:
你写得更快 :) +1【参考方案2】:你要求一个路口:http://php.net/manual/en/function.array-intersect.php
在您的情况下,您将需要对两个数组的每个组合执行交集的逻辑。
【讨论】:
Err. 我不这么认为:我找到了 array_interselect。但是这个函数只返回第一个数组的结果 不,它执行相交:导致 both 参数数组。 问题是,如果我有很多数组(例如 14 个),那么任何组合都是很多组合。以上是关于如何获取出现在 1 个以上数组中的所有值?的主要内容,如果未能解决你的问题,请参考以下文章
Vuejs - 如何使用 v-for 获取数组中的所有唯一值(删除重复项)
如何从另一个数组中的数组中获取数据,该数组在 Java 中存储值?