>  기사  >  백엔드 개발  >  반복을 제거하면서 PHP에서 여러 배열의 데카르트 곱을 어떻게 생성할 수 있습니까?

반복을 제거하면서 PHP에서 여러 배열의 데카르트 곱을 어떻게 생성할 수 있습니까?

DDD
DDD원래의
2024-11-26 03:19:09212검색

How can I generate the Cartesian product of multiple arrays in PHP while eliminating repetitions?

PHP에서 여러 배열의 데카르트 곱 계산

문제:

여러 PHP에서 배열, 가능한 모든 요소 조합을 결합하는 데카르트 곱을 어떻게 생성할 수 있습니까? 반복을 제외한 각 배열?

해결책:

PHP에서 데카르트 곱을 얻으려면 array_cartesian이라는 재귀 함수를 정의할 수 있습니다. 이 함수는 입력 배열의 배열을 인수로 사용합니다. 기본 사례는 배열 수가 0일 때 발생하며, 이 경우 배열 내부의 빈 배열이 반환됩니다. 그렇지 않으면 함수는 array_shift 함수를 사용하여 목록에서 첫 번째 배열을 제거한 다음 나머지 배열로 자신을 재귀적으로 호출합니다.

첫 번째 배열의 각 요소 v에 대해 함수는 각 하위 배열을 반복합니다. p는 나머지 배열의 데카르트 곱입니다. 그런 다음 v와 p를 병합하여 새 하위 배열을 구성하고 이 하위 배열을 결과 데카르트 곱에 추가합니다.

예:

다음 집합을 고려하세요. 배열:

$array[0][0] = 'apples';
$array[0][1] = 'pears';
$array[0][2] = 'oranges';

$array[1][0] = 'steve';
$array[1][1] = 'bob';

이러한 배열을 array_cartesian 함수에 전달하면

$cross = array_cartesian(
    array('apples', 'pears',  'oranges'),
    array('steve', 'bob')
);

print_r($cross);

다음 출력을 생성하는 데카르트 곱을 얻을 수 있습니다.

Array
(
    [0] => Array
        (
            [0] => apples
            [1] => steve
        )

    [1] => Array
        (
            [0] => apples
            [1] => bob
        )

    [2] => Array
        (
            [0] => pears
            [1] => steve
        )

    [3] => Array
        (
            [0] => pears
            [1] => bob
        )

    [4] => Array
        (
            [0] => oranges
            [1] => steve
        )

    [5] => Array
        (
            [0] => oranges
            [1] => bob
        )

)

따라서 이 함수는 입력 배열에서 모든 고유한 요소 조합을 효과적으로 생성합니다.

위 내용은 반복을 제거하면서 PHP에서 여러 배열의 데카르트 곱을 어떻게 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.