> 백엔드 개발 > PHP 튜토리얼 > 조합과 순열을 포함하여 PHP의 1D 배열에서 가능한 모든 조합을 어떻게 생성할 수 있습니까?

조합과 순열을 포함하여 PHP의 1D 배열에서 가능한 모든 조합을 어떻게 생성할 수 있습니까?

DDD
풀어 주다: 2024-10-28 20:34:02
원래의
392명이 탐색했습니다.

How can I generate all possible combinations from a 1D array in PHP, including both combinations and permutations?

PHP에서 가능한 모든 조합 가져오기: 포괄적인 솔루션

1D 배열에서 가능한 모든 조합을 검색하는 것은 특히 다음과 같은 경우 복잡한 작업이 될 수 있습니다. 조합과 순열을 모두 고려합니다. 이 문제에 대한 다양한 접근 방식이 있지만 매우 효과적인 해결책 중 하나는 재귀 함수를 구현하는 것입니다.

재귀 함수인 deep_picker()는 배열에 대해 깊이 우선 검색을 수행하고 모든 분기를 탐색하고 요소를 결합하여 구성 요소를 구성합니다. 조합. 각 요소에 따라 점진적으로 수정되는 임시 문자열을 유지하는 반면, Collect 배열은 최종 조합을 저장합니다. 이 함수가 어떻게 작동하는지 살펴보겠습니다.

  1. 기본 사례: 임시 문자열이 비어 있으면 독립형 요소가 고려되고 있음을 의미합니다. 이 경우에는 Collect 배열에 직접 추가됩니다.
  2. 재귀 탐색: 요소를 결합할 때 함수는 원래 배열의 복사본을 만들고 현재 요소를 제거합니다. 그것으로부터. 그런 다음 수정된 배열에서 깊이_선택기()를 재귀적으로 호출하여 추가된 요소와 함께 업데이트된 임시 문자열을 전달합니다. 결합할 요소가 더 있으면 재귀 프로세스를 계속합니다.
  3. 조합 및 순열: 각 요소를 반복하고 재귀적으로 결합함으로써 깊이_선택기()는 가능한 모든 조합과 순열을 효과적으로 생성합니다. 반복하지 않고. 이 접근 방식을 사용하면 문자열의 두 변형('알파 베타' 및 '베타 알파')이 최종 출력에 포함됩니다.
  4. 최종 결과: 함수가 모든 조합을 탐색하면 수집 배열에는 입력 배열에서 가능한 모든 조합의 전체 세트가 포함되어 있습니다.

구현 및 실행

이러한 깊이 우선 검색 및 조합 검색을 구현하려면, 다음 PHP 코드를 사용할 수 있습니다.

<code class="php"><?php

$array = array('Alpha', 'Beta', 'Gamma', 'Sigma');

function depth_picker($arr, $temp_string, &amp;$collect) {
    if ($temp_string != "")
        $collect []= $temp_string;

    for ($i=0, $iMax = sizeof($arr); $i < $iMax; $i++) {
        $arrcopy = $arr;
        $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
        if (sizeof($arrcopy) > 0) {
            depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect);
        } else {
            $collect []= $temp_string. " " . $elem[0];
        }
    }
}

$collect = array();
depth_picker($array, "", $collect);
print_r($collect);

?></code>
로그인 후 복사

실행 시 이 코드는 가능한 모든 조합과 배열의 다음 배열을 출력합니다.

Array
(
    [0] =>  Alpha
    [1] =>  Alpha Beta
    [2] =>  Alpha Beta Gamma
    [3] =>  Alpha Beta Gamma Sigma
    [4] =>  Alpha Beta Sigma
    [5] =>  Alpha Beta Sigma Gamma
    [6] =>  Alpha Gamma
    [7] =>  Alpha Gamma Beta
    [8] =>  Alpha Gamma Beta Sigma
    [9] =>  Alpha Gamma Sigma
    [10] =>  Alpha Gamma Sigma Beta
    [11] =>  Alpha Sigma
    [12] =>  Alpha Sigma Beta
    [13] =>  Alpha Sigma Beta Gamma
    [14] =>  Alpha Sigma Gamma
    [15] =>  Alpha Sigma Gamma Beta
    [16] =>  Beta
    [17] =>  Beta Alpha
    [18] =>  Beta Alpha Gamma
    [19] =>  Beta Alpha Gamma Sigma
    [20] =>  Beta Alpha Sigma
    [21] =>  Beta Alpha Sigma Gamma
    [22] =>  Beta Gamma
    [23] =>  Beta Gamma Alpha
    [24] =>  Beta Gamma Alpha Sigma
    [25] =>  Beta Gamma Sigma
    [26] =>  Beta Gamma Sigma Alpha
    [27] =>  Beta Sigma
    [28] =>  Beta Sigma Alpha
    [29] =>  Beta Sigma Alpha Gamma
    [30] =>  Beta Sigma Gamma
    [31] =>  Beta Sigma Gamma Alpha
    [32] =>  Gamma
    [33] =>  Gamma Alpha
    [34] =>  Gamma Alpha Beta
    [35] =>  Gamma Alpha Beta Sigma
    [36] =>  Gamma Alpha Sigma
    [37] =>  Gamma Alpha Sigma Beta
    [38] =>  Gamma Beta
    [39] =>  Gamma Beta Alpha
    [40] =>  Gamma Beta Alpha Sigma
    [41] =>  Gamma Beta Sigma
    [42] =>  Gamma Beta Sigma Alpha
    [43] =>  Gamma Sigma
    [44] =>  Gamma Sigma Alpha
    [45] =>  Gamma Sigma Alpha Beta
    [46] =>  Gamma Sigma Beta
    [47] =>  Gamma Sigma Beta Alpha
    [48] =>  Sigma
    [49] =>  Sigma Alpha
    [50] =>  Sigma Alpha Beta
    [51] =>  Sigma Alpha Beta Gamma
    [52] =>  Sigma Alpha Gamma
    [53] =>  Sigma Alpha Gamma Beta
    [54] =>  Sigma Beta
    [55] =>  Sigma Beta Alpha
    [56] =>  Sigma Beta Alpha Gamma
    [57] =>  Sigma Beta Gamma
    [58] =>  Sigma Beta Gamma Alpha
    [59] =>  Sigma Gamma
    [60] =>  Sigma Gamma Alpha
    [61] =>  Sigma Gamma Alpha Beta
    [62] =>  Sigma Gamma Beta
    [63] =>  Sigma Gamma Beta Alpha
)
로그인 후 복사

이 접근 방식은 포괄적이고 효율적인 솔루션을 제공합니다. 배열에서 요소의 가능한 모든 조합을 얻고 조합과 다른 배열이 모두 출력에 포함되도록 합니다.

위 내용은 조합과 순열을 포함하여 PHP의 1D 배열에서 가능한 모든 조합을 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿