将多个数组传递给笛卡尔函数


Passing multiple arrays to a Cartesian function

我需要将索引格式的多个数组传递给笛卡尔函数,以便计算每个排列。当代码为以下代码时,这有效:

$count = cartesian(
Array("GH20"),
Array(1,3),
Array(6,7,8), 
Array(9,10)
);

我并不总是知道数组的长度、数量或值,因此它们存储在另一个数组"$total"中,可能如下所示:

Array ( 
    [0] =>  Array
            (
            [0] => 1
            [1] => 3
            ) 
    [1] => Array 
            (
            [0] => 6
            [1] => 7 
            [2] => 8
            ) 
    [2] => Array 
            ( 
            [0] => 9 
            [1] => 10 
            ) 
    )

我尝试按照以下方式实现user_call_back_function:

$count = call_user_func('cartesian', array($total));

但是,然后传递的数组如下所示:

Array (
[0] => Array (
    [0] => Array (
        [0] => Array (
            [0] => 1
            [1] => 3
            [2] => 4
        )
            [1] => Array (
            [0] => 5
            [1] => 6
            [2] => 7
            [3] => 8
        )
            [2] => Array (
            [0] => 9
            [1] => 10
        )
        )
    )
)

我哪里出错了,为什么数组被埋在不需要它的维度上,这就是我的笛卡尔函数不再起作用的原因吗?

谢谢,尼克

根据要求,这是我的笛卡尔函数:

function cartesian() {
$_ = func_get_args();
if(count($_) == 0)
    return array(array());
$a = array_shift($_);
$c = call_user_func_array(__FUNCTION__, $_);
$r = array();
foreach($a as $v)
    foreach($c as $p)
        $r[] = array_merge(array($v), $p);
return $r;
}

为什么阵列被埋在不需要它的维度上

仅仅因为您在调用 call_user_func 时将一个数组包装在另一个数组中。

$count = call_user_func('cartesian', array($total));

也许你的意思是:

$count = call_user_func('cartesian', $total);

这就是我的笛卡尔功能不再起作用的原因吗?

我不知道,你还没有发布你的cartesain,只是一个叫cartesain的阿拉特

编辑为操作更新了问题。

如果您使用的是 PHP 5.6,您应该能够使用 splat 运算符。

call_user_func("cartesain", ...$total);

免责声明,我还没有测试过这个。

数组和可遍历对象可以在调用函数时解压缩到参数列表中,方法是使用 ...算子。