Скажем, у меня есть такой массив:
Array
(
[arm] => Array
(
[0] => A
[1] => B
[2] => C
)
[gender] => Array
(
[0] => Female
[1] => Male
)
[location] => Array
(
[0] => Vancouver
[1] => Calgary
)
)
Как мне найти декартово произведение, сохранив ключи внешнего ассоциативного массива и используя их во внутренних? Результатом алгоритма должно быть следующее:
Array
(
[0] => Array
(
[arm] => A
[gender] => Female
[location] => Vancouver
)
[1] => Array
(
[arm] => A
[gender] => Female
[location] => Calgary
)
[2] => Array
(
[arm] => A
[gender] => Male
[location] => Vancouver
)
...etc.
Я просмотрел довольно много алгоритмов декартового произведения но я зацикливаюсь на деталях того, как сохранить ассоциативные ключи. Текущий алгоритм, который я использую, дает только числовые индексы:
$result = array();
foreach ($map as $a) {
if (empty($result)) {
$result = $a;
continue;
}
$res = array();
foreach ($result as $r) {
foreach ($a as $v) {
$res[] = array_merge((array)$r, (array)$v);
}
}
$result = $res;
}
print_r($result);
Любая помощь приветствуется.