如何获取出现在 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 中存储值?

如何从 Java 中的未排序数组中快速获取前 N 个出现项?

如何获取数组里对象的某个值

如何在js中获取session中的对象的属性值