2012-03-08 5 views
1

배열이 2 개 있습니다. 항상 사용해야하는 항목 1 개와 선택 항목 1 개가있는 항목. 내가 원하는 것은이 항목들과 가능한 모든 조합의 목록입니다. 배열의 항목은 true 또는 false 값이있는 속성이되어야합니다. 이 두 배열에있는 항목의 수와 작품을 가지고 당연히PHP : 배열의 가능한 모든 조합을 생성합니다. 일부 항목은 필수이고 일부는 선택 사항입니다.

header="false" footer="false" 
header="false" footer="false" image="false" 
header="false" footer="false" image="true" 
header="true" footer="false" 
header="true" footer="false" image="false" 
header="true" footer="false" image="true" 
header="false" footer="true" 
header="false" footer="true" image="false" 
header="false" footer="true" image="true" 
header="true" footer="true" 
header="true" footer="true" image="false" 
header="true" footer="true" image="true" 

: 예를 들어

, 배열

$requiredAttr = array('header', 'footer'); 
$optAttr = array('image'); 

는 다음과 같은 결과를 제공해야합니다.

+0

엄청난 질문을위한 고맙습니다 ... – sandeep

답변

0

확인이 .. 변화 변수 이름이 표준에 따라 ... 내가 debuging에 대한 모든 배열을 인쇄 할 수 있습니다.

http://codepad.org/HK1plx9n

는 더 많은 코드 http://codepad.org/pwVOWeRJ

<?php 

$requiredAttr = array('header', 'footer'); 
$boolarr = array('true', 'false'); 
$optAttr = array('image'); 

$larr = combine_array($requiredAttr , $boolarr , '='); 

$a_arr = array_slice($larr , 0 , count($larr)/2); 
$b_arr = array_slice($larr , count($larr)/2 , count($larr)/2); 


$larr_1 = combine_array($a_arr , $b_arr , ' '); 
$larr  = combine_array($optAttr , $boolarr , '='); 
array_push($larr , ''); // for optional 

$larr_3 = combine_array($larr_1 , $larr , ' '); 

function combine_array($first_arr , $second_arr , $separator) 
{ 
    $combine_arr = array(); 
    for($i=0;$i<count($first_arr) ; $i++) 
    { 
    for($j=0;$j<count($second_arr) ; $j++) 
    { 
     array_push($combine_arr , $first_arr[$i].$separator.$second_arr[$j]); 
    } 
    } 
    return $combine_arr; 
} 



print_r($larr_3); 



?> 
0

이 값은 단순히 모든 값을 반환하는 이진 트리로 구현할 수 있습니다. (이론적 만, 아마 작동하지 않습니다) 식으로 뭔가 :

function a($bool_arr, $required, $optional) 
{ 
    if (count($bool_arr) < (count($required) + count($optional)) 
    { 
     return array_merge(a(array_merge($bool_arr), array(true), $required, $optional), a(array_merge($bool_arr), array(false), $required, $optional)); 
    } 
} 
0

별도의

모든 선택적 속성에서 필요한 각이 this gist를 세트로 사용 최적화. 각 집합의 조합을 만들었 으면 필요한 조합 조합의 각 조합을이 배열에 복사하고 모든 조합 조합 옵션 집합을 필요한 모든 조합 조합 집합에 추가하기 만하면됩니다.

관련 문제