Это должно сработать для вас:
Итак, что делает этот код?
1. Сколько комбинаций есть?
Итак, сначала вопрос, сколько комбинаций есть, и ответ заключается в том, что вам нужно умножить количество каждого массива друг на друга.
So (c = количество1):
carray 1 * carray 2 * ... * carray n
blockquote>И конкретный для вашего примера:
carray 1 * carray 2 = 3 * 3 = 9
blockquote>* 1 И если вам интересно, почему я выбрал
c
для суммы, из-за функцииcount()
в php2. Получение всех комбинаций
Как мы теперь получаем все комбинации с длиной количества всех массивов?
Ну, довольно просто, мы просто просматриваем все комбинации (с самого начала просто пустая комбинация (
[] == array()
)), которую мы уже имеем со следующим массивом, пока мы не получим желаемую длину, которую хотим, в этом случае последнюю итерацию последнего массива.Итак, в качестве примера:
Array with the elements (Empty array is '[]'): [ [1, 2], [3, 4] ]
//new combinations for the next iteration | array NAN*: Combinations: - [] | -> [] | array 1 [1,2]: ------------- | | Combinations: v v - [] + 1 | -> [1] - [] + 2 | -> [2] | array 2 [3,4]: ------------- | | Combinations: v v - [] + 3 | -> [3] - [] + 4 | -> [4] - [1] + 3 | -> [1,3] - [1] + 4 | -> [1,4] - [2] + 3 | -> [2,3] - [2] + 4 | -> [2,4] //^ All combinations here
* NAN: не число
Итак, как вы можете видеть в приведенном выше примере, теперь мы имеем все комбинации с длиной количество всех массивов, которые у нас есть.
Но чтобы получить только комбинации с нужной длиной, мы переписываем массив результатов на каждую итерацию, так что в конце только комбинации с ожидаемой длиной находятся в массив результатов.
код:
<?php $data = [ 35 => ["green", "red", "brown"], 36 => ["fox", "house", "dog"] ]; $combinations = [[]]; $comKeys = array_keys($data); for ($count = 0; $count < count($comKeys); $count++) { $tmp = []; foreach ($combinations as $v1) { foreach ($data[$comKeys[$count]] as $v2) $tmp[] = $v1 + [$comKeys[$count] => $v2]; } $combinations = $tmp; } print_r($combinations); ?>
выход:
Array ( [0] => Array ( [35] => green [36] => fox ) [1] => Array ( [35] => green [36] => house ) [2] => Array ( [35] => green [36] => dog ) [3] => Array ( [35] => red [36] => fox ) [4] => Array ( [35] => red [36] => house ) [5] => Array ( [35] => red [36] => dog ) [6] => Array ( [35] => brown [36] => fox ) [7] => Array ( [35] => brown [36] => house ) [8] => Array ( [35] => brown [36] => dog ) )
Это не код VC6. Документация Microsoft Visual C 6.0 по-прежнему доступна в Интернете, и она не упоминает директивы #use
. Я предполагаю, что вы смотрите на код Dynamic C 6.0.
Dynamic C является продуктом Rabbit Semiconductors, который первоначально был подразделением Z-World, Inc, но был продан в 2006 году Digi International , Это, скорее всего, станет мертвой ссылкой довольно быстро, но здесь - это руководство Dynamic C; захватите это, пока вы можете ... это документы #use
.
В частности, default.h
имеет набор #use
директив для каждого произведения Кролика. AASC.LIB
- библиотека последовательных коммуникаций на уровне приложений; AASCZ0.LIB
содержит вспомогательные функции для встроенных функций Z0
, в соответствии с этой гораздо более старой ссылкой, которая кажется нацеленной на Zilog Z180 и Dynamic C версии 6.x.