2014-11-17 2 views
3

나는 며칠 동안 머리를 긁어서 긁으면 바위와 힘든 곳 사이에 갇혀있다. 이전 코드가 모두 실행 된 후에이 배열이 남았습니다.PHP 2D 배열에서 모든 순열 계산

Array ( 
    [0] => Array 
    (
     [0] => 1 
     [1] => 3 
    ) 
    [1] => Array 
    (
     [0] => 6 
     [1] => 7 
     [2] => 8 
    ) 
    [2] => Array 
    ( 
     [0] => 9 
     [1] => 10 
    ) 
) 

모든 키의 모든 가능한 순열을 계산합니다.

원하는 출력을 개별 레코드 또는 SQL 데이터베이스에 대량 삽입 할 때 쉽게 삽입 할 수 있어야합니다.

내 사냥을 한 후, 수많은 예제를 시도했습니다. Implode 함수를 사용하는 것이 가장 가까운 것은 여전히 ​​작동하지 않습니다.

도움을 주시면 대단히 감사하겠습니다. 여기

--Edit--

는 반환 된 배열이 보일 것입니다 방법의 예입니다 :

Array 
(
    [0] => 1,6,9 
    [1] => 1,6,10 
    [2] => 3,6,9 
    [3] => 3,6,10 
    [4] => 1,7,9 
    [5] => 1,7,10 
    [6] => 3,7,9, 
    [7] => 3,7,10 
) 

이 아니다 모든 순열,하지만 당신에게 내가 필요가있는 무엇의 아이디어를 줄 것이다 이루다.

+0

당신이 크기를 전환 할 수행 permutation formula

그리고 그렇게 할 수 있습니다, 그것은 데카르트 제품이라고? 제 3 차원의 가치가 처음부터 사용될 수 있다는 의미입니까? – Cheery

+0

@Cheery이 코드를 작동시키는 것이 더 중요합니다. 반환 된 출력 형식에 따라 삽입을 데이터베이스에 다시 쓸 수 있습니다. 감사합니다 –

답변

5

당신이이 공식에 정의하려고 노력하고 있습니다 :

function cartesian() { 
    $_ = func_get_args(); 
    if(count($_) == 0) 
     return array(array()); 
    $a = array_shift($_); 
    $c = call_user_func_array(__FUNCTION__, $_); 
    $r = array(); 
    foreach($a as $v) 
     foreach($c as $p) 
      $r[] = array_merge(array($v), $p); 
    return $r; 
} 

$count = cartesian(
    Array(1,3), 
    Array(6,7,8), 
    Array(9,10) 
); 

print_r($count); 
+0

그건 놀라운거야! 고맙습니다! 마지막 질문, 그것은 동적 배열을 사용하는 것이 가능할 것 "$ 카운트 = 프린터 (" 만약 내 원래의 배열 = "$ 총" 은 내가 사용하는 수 ... = 프린터 "$ 수 ($ 총) ; " –

+0

내 배열을 사용하는 인덱스 배열로 변환 할 수 있지만 여러 배열이있을 수 있습니다. 동적 인합니다. 각 배열을 인덱싱 된 배열로 추가하려면 foreach 루프를 사용하여 시도했지만이 작동하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다! :) –

+0

@NicholasMordecai 역동적 인 의미는 무엇입니까? 3d, 4d 또는 5d 배열을 사용하는 경우 결국 배열이 단순 배열 수로 줄어들 수 있습니다. –