2013-03-12 1 views
0

2 개의 배열, 배열 AB 각각 있습니다. 배열 에는 ~ 300,000 개의 문자열 레코드가 들어 있습니다.PHP : 두 개의 거대한 배열에서 일반적인 값을 구하십시오.

[0] => 'apple', 
[1] => 'pineapple', 
[2] => 'orange', 
... 
[299,999] => 'banana' 

반면에 배열 B는 100,000 개의 문자열 값을 포함합니다.

[0] => 'bamboo', 
[1] => 'banana', 
[2] => 'boy', 
[3] => 'ball', 
[4] => 'balloon', 
[5] => 'bazooka', 

질문은 두 개의 배열 사이에서 공통 값을 찾는 방법입니까?

array_intersect()은 유망한 기능인 것처럼 보이지만 성능에 대해 걱정합니다. 2 개의 배열을 텍스트 파일로 변환하는 것이 더 좋고 파일 기반 비교를 수행합니까? 또는 나는 너무 많이 걱정하고 있는가?

코드는 array_intersect()를 사용 :

$result_array = array_intersect($arrayA, $arrayB); 
+5

성능을 테스트 해 보셨습니까? –

+1

두 개의 배열이 있다면'array_intersect'가 아마도 교차점을 찾는 가장 효율적인 방법 일 것입니다. 파일에 파일을 쓰는 것은별로 의미가 없습니다. – Ryan

+0

OS의 diff 명령 (사용 가능한 것으로 가정)을 사용하지 않는 한 array_intersect가 최선의 방법이 될 것입니다. – rantsh

답변

-1

는 array_intersect 기능이 배열

그러나 공통적 값을 검색에 사용되는 배열의 크기는 성능에 대한 우려 실행을 위해 스크립트에서 구성을 지정해야 거대로

set_time_limit(0); 
    ini_set('memory_limit','128M'); 

위의 코드 조각은 각각 실행 시간 제한을 infinity 및 inc로 설정합니다 reasing 메모리 제한은 큰 크기의 배열을 잡는 데 필요한 더 많은 메모리를 할당합니다

+1

파손되지 않았다면 고치지 마십시오. 그 길이에 대한 총 ~ 400,000 개의 문자열은 약 28MB가 될 것입니다. – Ryan

+0

@minitech - 중단되지 않은 경우 다시 시도하십시오. 그런 다음 천천히 떠나십시오. 아무도 알 수 없습니다. –

+1

@minitech : 여기에 38.5Mb이며 문자열이 길어질 때까지 변경되지 않습니다. * ($ o = memory_get_usage (true); $ a = array_fill (0, 300000, 'apple'); var_dump ((memory_get_usage (true) - $ o)/1024/1024);') – zerkms