我有阵列:
$total =array();
Array (
[0] => Array
(
[0] => 1
[1] => 3
)
[1] => Array
(
[0] => 6
[1] => 7
[2] => 8
)
[2] => Array
(
[0] => 9
[1] => 10
)
)
我需要动态地将每个数组更改为笛卡尔函数的索引数组。
以下是我需要代码来查找函数才能正常工作的方法:
$count = cartesian(
Array(1,3),
Array(6,7,8),
Array(9,10)
);
任何帮助将不胜感激!我已经尝试使用array_values进行展平,循环,仅使用数组本身,并且我一直在做空。
由于
尼克
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;
}
$count = call_user_func('cartesian', array($total));
print_r($count);
答案 0 :(得分:3)
您的阵列已经完全按照您希望的方式显示。 array(1,3)
与array(0 => 1, 1 => 3)
相同,并且两者都是一个数组,其值1
位于键0
,而3
位于键1
。正是调试输出显示的内容。
看起来你只需要将它们作为单独的参数传递给函数。 E.g:
cartesian($total[0], $total[1], $total[2])
对于动态长度的数组,请执行:
call_user_func_array('cartesian', $total)
答案 1 :(得分:2)
我相信您的$total
数组是multi-dimensional
数组numeric indexed
。所以你可以这样试试
$count = cartesian($total[0], $total[1], $total[2]);