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

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

Barbara Streisand
풀어 주다: 2024-12-26 13:58:13
원래의
618명이 탐색했습니다.

How to Calculate the Cartesian Product of PHP Associative Arrays while Preserving Keys?

PHP 연관 배열을 사용하여 데카르트 곱 찾기


연관 배열이 제공되면 키를 유지하면서 데카르트 곱을 결정하는 것이 가능합니다. 내부에서 이를 활용하는 것입니다. 배열.

방법론


이 문제는 유도를 통해 접근할 수 있습니다.



  1. 단일 배열의 경우 데카르트 곱은 다음과 같습니다. 원래 배열의 각 항목을 나타내는 단일 키-값 쌍이 있는 일련의 배열입니다.



  2. 첫 번째 N의 곱을 가정합니다. -1개의 배열이 알려져 있으며 N번째 배열을 추가합니다. 포함:



  3. 기존 제품 각각에 대해 N번째 배열의 키와 N번째 배열의 첫 번째 값이 포함된 요소를 추가합니다. 배열.




이 단계를 반복하면 N 배열의 곱이 얻어집니다.


구현


함수 cartesian($input) {<pre class="brush:php;toolbar:false">$result = array();

foreach ($input as $key => $values) {
    if (empty($values)) {
        continue;
    }

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

        foreach($result as &amp;$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 = array(</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">'arm' => array('A', 'B', 'C'),
'gender' => array('Female', 'Male'),
'location' => array('Vancouver', 'Calgary'),
로그인 후 복사

);

print_r(cartesian($input));


<사전>배열
(

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

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

[2] => Array
    (
        [arm] => A
        [gender] => Male
        [location] => Vancouver
    )
</p>
로그인 후 복사

...etc.

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

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