Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组检查是否存在所有值_Php_Performance_Algorithm_Cakephp_Divide And Conquer - Fatal编程技术网

Php 数组检查是否存在所有值

Php 数组检查是否存在所有值,php,performance,algorithm,cakephp,divide-and-conquer,Php,Performance,Algorithm,Cakephp,Divide And Conquer,检查数组中的值以查看是否存在所有值是一种快速且成本最低的方法 假设我有一个数组 $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将匹配

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

假设我有一个数组

$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万个这样的阵列,然后以上述方式在这些阵列上循环将是一场性能噩梦

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

编辑
正如我在下面的评论中所提到的,我不是在寻找被认为是重复的问题中给出的答案。我想要O(1)解,而不是n^2。那里的解决方案对我没有帮助。我想我需要正确地划分这个数组,或者将数组分为子桶,等等。想象一下100-200万个数组,现在想象一下其中的3亿个数组。该解决方案无法扩展

我认为这个功能可以帮助您:

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';

你把foreach排除在外?那么,没有循环?也许是数组_diff函数?我看过这个解决方案,但我不确定性能是否会更好。这是我在上面的评论中添加的解决方案,但这仍然不能帮助我了解如何不这么做。我希望像《分而治之》这样的东西,etcI没有看到你的解决方案,我自己想出来。无论如何,我编辑了这个问题。您的解决方案无法扩展到Memy。您是否可以使用此主题