2011-03-22 5 views
11

나는 임의의 수의 PHP 배열과 교차하려고합니다.이 배열의 수는 사용자 제공 매개 변수에 따라 다르며, 각 매개 변수의 수는 임의의 수입니다.PHP에서 배열을 알 수없는 수의 교차 번호

: 배열 1 (1, 2, 3, 4, 5) 배열 2 (2, 4, 6, 8, 9, 23) array3 (A, B, 3, C, F) . .. arrayN (x1, x2, x3, x4, x5 ... xn)

array_intersect는 매개 변수 목록을 사용하므로 교차 할 배열 배열을 하나 만들 수 없으며이 문제를 해결해야합니다. . 나는이 해결책을 시도했다 : http://bytes.com/topic/php/answers/13004-array_intersect-unknown-number-arrays 그러나 이것은 array_intersect가 2 개 이상의 params를 필요로한다고보고 된 오류로 작동하지 않았다.

누구나 가능한 한 간단하게이 방법에 접근하는 방법을 알고 있습니까?

답변

38

는 다음 평가를 사용하지 마십시오 call_user_func_array()

$wrkArray = array($userArray1, 
        $userArray2, 
        $userArray3 
       ); 
$result = call_user_func_array('array_intersect',$wrkArray); 
+0

이미 내 원래의 질문에있는 링크에서 언급 한 것을 시도

감사합니다 도움이되기를 바랍니다. "경고 : array_intersect() [function.array-intersect] : 최소한 2 개의 매개 변수가 필요하고 1은 ..." – Swader

+0

어리석은 저, 저는 call_user_func의 "_array"부분을 놓쳤습니다! 고맙습니다! – Swader

+1

@swader - 실수하기 쉽습니다 ... 너무 많이 차버리는 일이 없도록하십시오 :-) –

4

를 사용하는 당신의 배열의 각을 추가, 새로운 빈 배열을 생성()!

보십시오이

$isect = array(); 
for ($i = 1; $i <= $N; $i++) { 
    $isect = array_intersect($isect, ${'array'.$i}); 
} 

또는

$arrays = array() 
for ($i = 1; $i <= $N; $i++) { 
    $arrays[] = ${'array'.$i}; 
} 
$isect = call_user_func_array('array_intersect', $arrays); 
+1

** $ { 'array'를 사용하십시오. $ i} ** 만약 당신이 정말로이 길로 가면. – eisberg

+1

@eisberg : thx, updated – rik

+0

첫 번째 옵션이 작동하지 않습니다. 결과가 빈 배열로 초기화되기 때문에 다음 교차 결과는 항상 빈 배열입니다. –

1
$arrays = [ 
    $userArray1, 
    $userArray2, 
    $userArray3 
]; 
$result = array_intersect(...$arrays); 
0

내가 아주 아주 늦게 내 대답을 게시,하지만 단지의 경우, 내가 도움이 코드의 작은 조각을 공유하고 싶어하고 누군가이 질문에 그것을 필요로합니다.

print_r(array_intersect(array_merge($array1,$array2,...),$intersectionArr); 

나는이

관련 문제