我需要将索引格式的多个数组传递给cartesain函数,以便计算每个排列。这在代码为:
时有效$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
)
)
)
)
我哪里出错了,为什么阵列被埋没在不需要的维度中,这就是我的cartesain功能不再起作用的原因?
谢谢,尼克
根据要求,这是我的cartesain功能:
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;
}
答案 0 :(得分:0)
为什么阵列被埋没在不需要的维度中?
只是因为在调用call_user_func
时将数组包装在另一个数组中。
$count = call_user_func('cartesian', array($total));
也许你的意思是:
$count = call_user_func('cartesian', $total);
这就是我的cartesain功能不再起作用的原因吗?
我不知道,你还没有发布你的cartesain
,只是一个名叫cartesain
编辑已更新问题。
如果您使用的是PHP 5.6,则应该可以使用splat operator。
call_user_func("cartesain", ...$total);
免责声明,我没有对此进行测试。
使用...运算符调用函数时,可以将数组和可遍历对象解压缩到参数列表中。