// JS 版
<head>
<title>test</title>

<script type="text/javascript">

function com(data) {
var N = data.length;//列个数
var store = [];
var temp = [];
for (var size = N; size >= 1; --size)
for (var mask = (1 << size) - 1; mask < 1 << N;)
{
var total = 1;
for (var i = 0; i < N; ++i)
if (mask & 1 << i)
{
temp[i] = total;
total *= data[i].length;
}
for (var id = 0; id < total; ++id)
{
var s = [];
for (var j = 0; j < N; ++j)
if (mask & 1 << j)
{
var v = (id - id % temp[j]) / temp[j] % data[j].length;
s.push(data[j][v]);
}
store.push(s);
}
var x = mask & - mask;
var y = mask + x;
mask = ((mask & ~y) / x >> 1) | y;
}

return store;
}

var data =
[
["A1",'A2','A3']
,["B1","B2"]
,["C1","C2"]
,['d1']
,['e1','e2','e3']
];

document.write(com(data).join('<br />'));

</script>
</head>

<body>
abcd
</body>