创建不带foreach的多N数组矩阵


Create multi-N array matrixes without foreach?

PHPunit中典型的@dataProvider方法如下所示:

return [
    [const1,    true],
    [const2,    true],
    [const3,    true],
    [const1,    false],
    [const2,    false],
    [const3,    false],
];

实际上是[const1,const2,const3]与[true,false]的乘积。当我们没有那么多值时,可以对其进行硬编码。

但当我们在每个"轴"中有许多项时,重复值的列表就太长了。一个可能的解决方案是每个"轴"有一个foreach。但是,如果我们有许多"轴"呢?

所以问题是——有人知道在这种情况下创建多轴多值数组的一些优雅方法吗?

tnx。

$array = [['const1','const2','const3'], [true, false]];
$count     = array_map('count', $array);
$finalSize = array_product($count);
$arraySize = count($array);
$output    = array_fill(0, $finalSize, []);
$i = 0;
$c = 0;
for (; $i < $finalSize; $i++) {
    for ($c = 0; $c < $arraySize; $c++) {
        $output[$i][] = $array[$c][$i % $count[$c]];
    }
}