>백엔드 개발 >PHP 튜토리얼 >키-값 쌍을 보존하면서 PHP 연관 배열의 데카르트 곱을 계산하는 방법은 무엇입니까?

키-값 쌍을 보존하면서 PHP 연관 배열의 데카르트 곱을 계산하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-27 01:40:11748검색

How to Compute the Cartesian Product of PHP Associative Arrays While Preserving Key-Value Pairs?

PHP 연관 배열로 데카르트 곱 찾기, 키-값 쌍 보존

다양한 속성을 나타내는 여러 하위 배열이 있는 연관 배열이 주어지면 작업은 다음을 계산하는 것입니다. 키와 해당 키를 보존하면서 데카르트 곱 값.

근거

각 하위 배열에 Cn 요소가 있는 N개의 하위 배열이 있는 $input 배열의 경우 귀납법을 진행할 수 있습니다.

  • N = 1인 경우 데카르트 곱은 단순히 입력 배열입니다.
  • 첫 번째 N-1 하위 배열의 데카르트 곱이 있다고 가정하면 다음과 같이 N번째 하위 배열의 곱을 계산할 수 있습니다.

    • In 제품 내의 각 항목(배열)에 KN => VN,1.
    • VN,2에서 VN,CN까지의 각 값에 대해 각 항목의 복사본을 제품에 추가하고 KN 값을 VN,m으로 변경합니다(모두 2 ≤ m ≤ CN).

코드

function cartesian($input) {
    $result = [];

    while (list($key, $values) = each($input)) {
        if (empty($values)) {
            continue;
        }

        if (empty($result)) {
            foreach ($values as $value) {
                $result[] = [$key => $value];
            }
        } else {
            $append = [];

            foreach ($result as &$product) {
                $product[$key] = array_shift($values);
                $copy = $product;

                foreach ($values as $item) {
                    $copy[$key] = $item;
                    $append[] = $copy;
                }

                array_unshift($values, $product[$key]);
            }

            $result = array_merge($result, $append);
        }
    }

    return $result;
}

사용량

$input = [
    'arm' => ['A', 'B', 'C'],
    'gender' => ['Female', 'Male'],
    'location' => ['Vancouver', 'Calgary'],
];

print_r(cartesian($input));

원하는 데카르트 곱을 출력하고, 키와 값 보존:

Array
(
    [0] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Vancouver
        )

    [1] => Array
        (
            [arm] => A
            [gender] => Female
            [location] => Calgary
        )

    [2] => Array
        (
            [arm] => A
            [gender] => Male
            [location] => Vancouver
        )

...etc.

위 내용은 키-값 쌍을 보존하면서 PHP 연관 배열의 데카르트 곱을 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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