Скажем, что у меня есть массив вроде следующего:
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);
Любая помощь будет оценена.