【问题标题】:array check to see if all values exists [duplicate]数组检查是否所有值都存在[重复]
【发布时间】:2015-04-12 21:41:53
【问题描述】:

什么是检查数组中的值以查看所有值是否存在的快速且成本最低的方法。

假设我有一个数组

$a = array(1,2,3,4,5,6);

我想将它与数组匹配

 $b = array(6,5,1,3,2,4)
    $c = array(1,9,2,3,4,5)
    $d = array(6,5,4,3,2,1)
    $e = array(1,2,3,4,5,6,7)
    $f = array(2,3,4,1,5,6)
    .....
etc, etc

在上面的 $a 将匹配 $b 和 $f,因为值是相同的,虽然不在同一个索引。

现在我知道我可以使用 foreach/in_array/array_search 等并遍历每个循环并尝试匹配值。如果数组大小增加并且我们拥有的数组数量增加,这可能会很快变得非常昂贵。我可能拥有 100 万到 200 万个以上的数组,然后以上述方式循环这些数组将是一场性能噩梦。

我的问题是实现这一目标的最佳方式是什么。你们会怎么做呢?任何想法都会有所帮助。谢谢

编辑 正如我在下面的 cmets 中提到的,我不是在寻找在被认为是重复的问题中给出的答案。我想要 O(1) 解决方案而不是 n^2。那里的解决方案对我没有帮助。我想我需要正确划分这个或子存储阵列等。想象一下 1-2 百万个阵列,现在想象 3 亿个这些阵列。该解决方案不会扩展。

【问题讨论】:

标签: php performance algorithm cakephp divide-and-conquer


【解决方案1】:

我觉得这个功能对你有帮助:

array_intersect($array1, $array2); or array_diff($array1, $array2)

and count($array2)

下一步你可以观察它是空的还是有元素的。

您还可以通过以下方式检查性能:

$start = microtime(true);
// Your script goes here
$end = microtime(true);
$time = number_format(($end - $start), 11);
echo 'This page loaded in ', $time, ' seconds';

【讨论】:

  • 是的,这就是我在上面的评论中添加的解决方案,但这仍然不能帮助我了解如何不那么暴力。我希望像分而治之之类的东西
  • 我没有看到你的解决方案,我自己弄清楚了。
  • 无论如何,我编辑了这个问题。您的解决方案不适用于我
  • 也许你这个话题会对你有所帮助stackoverflow.com/questions/2479963/how-does-array-diff-work
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 2021-08-06
  • 2020-09-19
  • 2011-12-14
  • 2021-08-03
  • 2015-01-08
  • 2021-11-08
相关资源
最近更新 更多