1

配列の組み合わせキーを取得したい-ここでは例:

$keys = array(
        array(
            'original',
            'section 1',
            'section 2'
        ),
        array(
            'original',
            'section 1'
        ),
        array(
            'original',
            'section 1'
        ),
        array(
            'original',
            'section 1',
            'section 2'
        ),
        array(
            'original',
            'section 1'
        )
);

元のセクションはすべて00000(5つの異なる配列のため5桁ですが、5つに限定されない1からnの配列が存在する可能性があります)、バリエーション#15はたとえば01010になります。基本的にすべてのバリエーションのリストを取得したいそれらを取得するためのそのキーのリスト。各配列内に9セクション+オリジナルを超えないことを前提としています。

出力は次のようになります。

array(
    array(
        "key" => "00000",
        "data" => array(
            "original", "original", "original", "original", "original"
        )
    ),
    array(
        "key" => "10000",
        "data" => array(
            "section 1", "original", "original", "original", "original"
        )
    ),
    array(
        "key" => "20000",
        "data" => array(
            "section 2", "original", "original", "original", "original"
        )
    ),
    array(
        "key" => "01000",
        "data" => array(
            "original", "section 1", "original", "original", "original"
        )
    )
    [...]
)  

これに加えて、他の方法でもそれを取得するための良い方法があるといいでしょう。キー01010を与え、すべてのセクションを元に戻します。

ありがとう!

4

1 に答える 1

2

これが私が思いついたものです:

$options = array();
$counter1 = 0;
foreach($keys as $values) {
    $counter1++;
    $counter2 = 0;
    $options[$counter1] = array();
    foreach($values as $key => $value) {
        if(isset($options[($counter1 - 1)])) {
            foreach($options[($counter1 - 1)] as $old_val) {
                $counter2++;
                $old_array = $old_val['data'];
                array_push($old_array, $value);
                $options[$counter1][$counter2] = array();
                $options[$counter1][$counter2]['key'] = $old_val['key'] . $key;
                $options[$counter1][$counter2]['data'] = $old_array;
            }
        }
        else {
            $counter2++;
            $options[$counter1][$counter2] = array();
            $options[$counter1][$counter2]['key'] = $key;
            $options[$counter1][$counter2]['data'] = array($value);
        }
    }
}
$all_options = end($options);

3 * 2 * 2 * 3 * 2 = 72であるため、正しい72の結果が得られます。

于 2013-01-08T15:50:41.927 に答える