我需要将索引格式的多个数组传递给笛卡尔函数,以便计算每个排列。当代码为以下代码时,这有效:
$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);
免责声明,我还没有测试过这个。
数组和可遍历对象可以在调用函数时解压缩到参数列表中,方法是使用 ...算子。