将2D阵列展平为单独的索引数组

时间:2014-11-18 16:03:05

标签: php arrays loops foreach

我有阵列:

 $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);

2 个答案:

答案 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]);