연관 배열의 키를 유지하면서 데카르트 곱 찾기
다음과 같은 연관 배열을 고려하세요.
$input = array( 'arm' => array('A', 'B', 'C'), 'gender' => array('Female', 'Male'), 'location' => array('Vancouver', 'Calgary'), );
목표는 원본을 보존하면서 이 배열의 데카르트 곱을 찾는 것입니다. 연관 키. 원하는 출력은 다음과 같습니다.
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' ), ... )
알고리즘 원리
입력 배열에 N개의 하위 배열($input)이 있고 각각 Cn 항목이 있다고 가정합니다. 여기서 n은 그 색인입니다. n번째 하위 배열의 i번째 항목은 Vn,i라고 합니다.
알고리즘은 귀납법으로 증명합니다(버그가 없다고 가정).
결과가 이미 다음의 데카르트 곱을 보유하고 있다고 가정합니다. 첫 번째 N-1 하위 배열인 경우 다음과 같이 확장할 수 있습니다.
코드 구현
function cartesian($input) { $result = array(); while (list($key, $values) = each($input)) { if (empty($values)) { continue; } if (empty($result)) { foreach ($values as $value) { $result[] = array($key => $value); } } else { $append = array(); 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; }
사용
$output = cartesian($input); print_r($output);
이 코드는 원본을 유지하면서 원하는 데카르트 곱을 출력합니다. 연관 키.
위 내용은 키를 보존하면서 연관 배열의 데카르트 곱을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!