2012-09-24 43 views
-1

我有数组的数组:查找出现在所有给定的数组中的元素

(1, 3), (3, 5, 7), (2, 3, 4), (3, 7, 9) 

我需要找到出现在所有子阵列, 在这种情况下,这个数字是“3”的值。

最有效的解决方案,我能找到的O(N^3),我想知道是否有更有效的方式来实现这一目标。

回答

1

您可以array_intersect尝试:

$output = array_intersect($array1, $array2, $array3, ...); 

或自动多:

$input = array(array(1, 3), array(3, 5, 7), array(2, 3, 4), array(3, 7, 9)); 
$output = $input[0]; 

foreach ($input as $key => $subarray) { 
    if ($key == 0) { 
    continue; 
    } 

    $output = array_intersect($output, $subarray); 
    if (empty($output)) { 
    break; 
    } 
} 

var_dump($output); 
+1

谢谢你!我已经把你的想法,改变了一点: 我用: call_user_func_array(“array_intersect”,$值)) 这是一个比较有效的。我想知道如果我应该首先找到具有最少元素的价值,并将其作为第一个参数出于效率考虑,但这是另一回事。 – Avenger

相关问题