1

ばかげた瞬間があるかもしれませんが、頭の中でこれを解決できないようです。

説明してみます:-

私は3つの「セット」を持っています。各セットには6つのオブジェクトが含まれています。これらのセットのすべての組み合わせを生成するには、ループ(または一連のネストされたループ)が必要です。

それはゲーム用です、私は鎧セットを比較するためのスクリプトを書こうとしています-悲しいことに私は知っています。セットの配列は次のようになります。-

class => array(
  set1 => array(
    hat item => array(stats)
    glove item => array(stats)
    ...
  set2 => array(
    hat item => array(stats)
    ...
  set3 => array(
    ...

)

これは私が思っていたよりもずっと簡単かもしれません(またはもっと難しいですか?)。

アイデアは大歓迎です!

ありがとう、ルー。

編集:-

これが配列のサンプルです。余分な統計情報をたくさん取り除き、各ピースに1つずつ残しました。-

$setinfo = array(
    'rk' => array(
        'set1' => array(
            'hat' => array(
                'will' => 114,
            ),
            'shoulders' => array(
                'will' => 78,
            ),
            'shirt' => array(
                'will' => 78,
            ),
            'gloves' => array(
                'will' => 78,
            ),
            'trousers' => array(
                'will' => 78,
            ),
            'boots' => array(
                'will' => 114,
            ),
        ),
        'set2' => array(
            'hat' => array(
                'will' => 78,
            ),
            'shoulders' => array(
                'will' => 78,
            ),
            'shirt' => array(
                'will' => 114,
            ),
            'gloves' => array(
                'will' => 78,
            ),
            'trousers' => array(
                'will' => 114,
            ),
            'boots' => array(
                'will' => 78,
            ),
        ),
        'set3' => array(
            'hat' => array(
                'will' => 78,
            ),
            'shoulders' => array(
                'will' => 114,
            ),
            'shirt' => array(
                'will' => 78,
            ),
            'gloves' => array(
                'will' => 114,
            ),
            'trousers' => array(
                'will' => 78,
            ),
            'boots' => array(
                'will' => 78,
            ),
        ),
    )
);

この例から(後で他の統計を比較することについて心配します)、「理想的な」部分は、set1の帽子とブーツ、set2のシャツとズボン、set3の手袋と肩になります。

私の質問は、後で比較するために、すべての順列で「結果」配列を生成できるループを作成するための最良の方法です。

4

1 に答える 1

2

この男からの実装は次のとおりです。

function array_cartesian_product($arrays)

{
    $result = array();
    $arrays = array_values($arrays);
    $sizeIn = sizeof($arrays);
    $size = $sizeIn > 0 ? 1 : 0;
    foreach ($arrays as $array)
        $size = $size * sizeof($array);
    for ($i = 0; $i < $size; $i ++)
    {
        $result[$i] = array();
        for ($j = 0; $j < $sizeIn; $j ++)
            array_push($result[$i], current($arrays[$j]));
        for ($j = ($sizeIn -1); $j >= 0; $j --)
        {
            if (next($arrays[$j]))
                break;
            elseif (isset ($arrays[$j]))
                reset($arrays[$j]);
        }
    }
    return $result;
}
$combinations = array_cartesian_product($sets);

簡単なテストケースを次に示します: http://phpfiddle.org/main/code/m1i-w7m

于 2012-10-24T09:44:32.690 に答える