> 백엔드 개발 > PHP 튜토리얼 > PHP의 여러 배열에서 모든 조합을 재귀적으로 생성하는 방법은 무엇입니까?

PHP의 여러 배열에서 모든 조합을 재귀적으로 생성하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-14 02:09:10
원래의
789명이 탐색했습니다.

How to Generate All Combinations from Multiple Arrays in PHP Recursively?

PHP의 여러 배열에서 조합 생성

소개

모든 조합을 생성하는 작업 여러 배열의 항목 중 조합 최적화 문제가 발생하는 경우가 종종 있습니다. 이 기사에서는 가변 개수의 소스 배열을 처리할 수 있는 함수의 필요성을 해결하는 재귀적 솔루션을 제시합니다.

문제 설명

다양한 개수의 배열이 주어진 경우 요소의 경우 항목의 모든 조합을 찾습니다. 여기서 조합 수는 각 배열의 요소 수를 곱한 것과 같습니다. 예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.

$arrayA = array('A1','A2','A3');
$arrayB = array('B1','B2','B3');
$arrayC = array('C1','C2');
로그인 후 복사

18개 조합의 배열을 생성하는 것이 목표입니다.

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ...
]
로그인 후 복사

재귀 솔루션

다음 재귀 함수는 가능한 모든 조합을 생성합니다. 항목:

function combinations($arrays, $i = 0) {
    // If reaching the last array, return the array itself
    if (!isset($arrays[$i])) {
        return array();
    }
    
    // If at the parent array, return the recursive call to the following array
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }
    
    // Get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // Concatenate each array from tmp with each element from $arrays[$i]
    foreach ($arrays[$i] as $v) {
        foreach ($tmp as $t) {
            $result[] = is_array($t) ? 
                array_merge(array($v), $t) :
                array($v, $t);
        }
    }
    
    return $result;
}
로그인 후 복사

데모

다음 코드는 조합 함수의 사용법을 보여줍니다.

print_r(
    combinations(
        array(
            array('A1','A2','A3'), 
            array('B1','B2','B3'), 
            array('C1','C2')
        )
    )
);
로그인 후 복사

이렇게 하면 예상되는 배열이 출력됩니다. 18가지 조합.

위 내용은 PHP의 여러 배열에서 모든 조합을 재귀적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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