たびたびすいません。

621さんのは仕様を満たしていないことに気付きました。
全ての組み合わせではない(a+1, 1+aは等価)。事が必要でした。
で、下記関数でくみなしたんですが、大丈夫なようです。

こうすれば。。というのがあればご意見ください。

--
function bar($arr)
{
$keys = array_keys($arr);

$allcnt = 1;
for ($i = 0; $i < count($keys); $i++ )
{
$allcnt *= count($arr[$keys[$i]]);
}
echo $allcnt,"\n";

for ($_i = 0; $_i < count($keys); $_i++ )
{
for ($j = 0, $s=0; $j < $allcnt / count($arr[$keys[$_i]]); $j++)
{
for ($i = 0; $i < count($arr[$keys[$_i]]); $i++, $s++ )
{
$ret[$s] .= $arr[$keys[$_i]][$i];
}
}
}
return $ret;
}