Php获得n维数组的所有组合

时间:2014-03-04 16:34:31

标签: php arrays multidimensional-array

我有一个路由元素数组(point1,point2,...)来提供给地图引擎。 我不知道我有多少分。每个点都是可能的地址数组。 我需要检查这些点的每种可能组合,但只需要一次成功的检查。

我的数组看起来像是类似于:

$point[0] = array($address1, $address2, $adress3);
$point[1] = array($address1, $address2);
$point[2] = array($address1, $address2, $adress3, $adress4);
$point[n] = ...

我想对组合执行测试:$point[0][0] - $point[1][0] - $point[2][0], $point[0][1] - $point[1][0] - $point[2][0],等等! :) 第一次成功的测试(找到的路线)应该结束这个功能。

我正在尝试使用递归做一些事情但是花了很多时间没有成功。

1 个答案:

答案 0 :(得分:0)

如果我找到了你,你想拥有"cartesian product"

这是一个示例功能:
它首先检查,如果其中一个子数组中有任何子值,然后它创建一个包含所有可能的数组合的数组并返回它。

<?php
function array_cartesian_product($arrays)
{
    $result = array();
    $arrays = array_values($arrays);
    $sizeIn = sizeof($arrays);
    $size = $sizeIn > 0 ? 1 : 0;
    foreach ($arrays as $array)
        $size = $size * sizeof($array);
    for ($i = 0; $i < $size; $i ++)
    {
        $result[$i] = array();
        for ($j = 0; $j < $sizeIn; $j ++)
            array_push($result[$i], current($arrays[$j]));
        for ($j = ($sizeIn -1); $j >= 0; $j --)
        {
            if (next($arrays[$j]))
                break;
            elseif (isset ($arrays[$j]))
                reset($arrays[$j]);
        }
    }
    return $result;
}
?>