Ищем комбинации массива с определенной длиной - PullRequest
2 голосов
/ 27 октября 2011

Я работаю над личным проектом и застрял в поиске комбинаций всех элементов массива, как показано ниже.Я могу узнать все комбинации, когда у меня есть определенное количество массивов, но, к сожалению, я не знаю.

Вот документированный код:

$C = array(
"I" => array(
    0   =>  array("I_1_1"),
    1   =>  array("I_1_2")
),
"L" => array(
    0   =>  array("L_1_1"),
    1   =>  array("L_2_1"),
),
"K" => array(
    0   =>  array("K_1_1"),
    1   =>  array("K_1_2"),
    2   =>  array("K_2_1"),
    3   =>  array("K_2_2"),
),
);

В настоящее время $ C имеет 3элементы, но это очень изменчиво, так как у вас может быть 2+ Кроме того, каждый массив внутри $ C также имеет переменную длину и может достигать максимальной длины 144, но это очень редко ..

В любом случае,Моя цель - заставить скрипт php выдать следующее:

I_1_1       L_1_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

            L_2_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

I_1_2       L_1_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

            L_2_1       K_1_1
                        K_1_2
                        K_2_1
                        K_2_2

Я сделал это специально, чтобы не повторять первые 2 столбца в выходных данных только для того, чтобы вы могли видеть «направление» комбинации, но в конечном итогевывод будет массивом, содержащим все возможные комбинации, такие как:

$result = array(array("I_1_1","L_1_1","K_1_1"),array("I_1_1","L_1_1","K_1_2")....

и т. д.

Я не знаю, ясно ли я пояснил или вас запутал еще больше, ноесли вам понадобятся какие-либо подробности, пожалуйста, дайте мне знать.

Заранее спасибо всем, кто мне помогает, я очень ценю все ваши усилия, которые вы, ребята, делаете, чтобы помочь таким людям, как я.

* Редактировать: * WoulБыло бы лучше для меня изменить структуру массива, чем использовать эту, чтобы легче генерировать перестановки?

1 Ответ

1 голос
/ 27 октября 2011

Если массив может идти только три глубины, вы можете сделать:

$combos = array(array());
foreach($C as $D) {
    $old_combos = $combos;
    $combos = array();
    foreach($D as $E) {
        foreach($old_combos as $combo) {
            $combos[] = array_merge($combo, $E);
        }
    }
}

Если это переменная глубина, вам понадобится отличная рекурсия.

...