6

私は3つの要素を持つ配列を持っています$base =(#m, #f,#p)

次のような任意の数の要素を持つ2番目の配列があります$var = (s1, s2)

ここで、基本配列のみに応じて、考えられるすべての組み合わせを作成する必要があります。私が見つけた式は ですx pow y

この例では、基本配列には 3 つの要素があり、$var2pow(3, 2)あるため、 9です。この9つの組み合わせが必要です。すなわち

#m#m #m#f #m#p
#f#m #f#f #f#p
#p#m #p#f #p#p

2 番目の配列の要素数は、実際には、生成された組み合わせの長さです。この例のように、2 番目の配列の長さは 2 であるため、生成されたすべての文字列の長さは 2 です。

4

2 に答える 2

4

次のような再帰関数を使用できます。

// input definition
$baseArray = array("#m", "#f", "#p");
$varArray = array("s1", "s2", "s3");

// call the recursive function using input
$result = recursiveCombinations($baseArray, sizeof($varArray));

// loop over the resulting combinations
foreach($result as $r){
    echo "<br />combination " . implode(",", $r);
}

// this function recursively generates combinations of #$level elements
// using the elements of the $base array
function recursiveCombinations($base, $level){
    $combinations = array();
    $recursiveResults = array();

    // if level is > 1, get the combinations of a level less recursively
    // for level 1 the combinations are just the values of the $base array
    if($level > 1){
        $recursiveResults = recursiveCombinations($base, --$level);
    }else{
        return $base;   
    }
    // generate the combinations
    foreach($base as $baseValue){
        foreach($recursiveResults as $recursiveResult){
            $combination = array($baseValue);
            $combination = array_merge($combination, (array)$recursiveResult);  
            array_push($combinations, $combination);
        }
    }
    return $combinations;
}

コードパッドのデモ

于 2012-09-11T13:01:49.997 に答える
0
<?php
    $strs = Array("some", "thing", "here");
    $poss = Array(1, 2);
    $new = Array();
    for($i = 0; $i < pow(count($strs), count($poss)); $i++) {
        for($j = 0; $j < count($strs); $j++) {
            $new[$i] = $strs[($i%count($strs))] . " " . $strs[$j];
        }
    }
    print_r($new);
?>

動作中のコードパッドリンク(特定の例)。

リンク

于 2012-09-11T12:57:47.030 に答える