private function createCartesianProduct($arrays)
{
$cartesian = array();
$dims = array_reverse($arrays);
foreach ($dims as $dimName => $dim) {
$buf = array();
foreach ($dim as $val) {
$buf[] = array($dimName => $val);
}
if (!count($cartesian)) {
$cartesian = $buf;
} else {
$tmp = array();
foreach ($buf as $elBuf) {
foreach ($cartesian as $elAp) {
$tmp[] = array_merge($elBuf, $elAp);
}
}
$cartesian = $tmp;
}
}
return $cartesian;
}