求PHP的多维数组嵌套遍历算法

现有一个二维数组 如图

clipboard.png

现在第一维一共三个key
每个key对应的一个数组,里面可能有多个元素
我要实现的是每个key出一个元素, 然后组成一个新的包含所有组合的排列
如图

clipboard.png

现在我是用如下算法做的。

clipboard.png
但显然这个称不上是算法,
现在$data只有三个key, 要是有30个key,难道我要写30个foreach吗?
所以求一个算法,输出图2的结果

阅读 3.4k
2 个回答
$data = [
    ['AAA','aaa','aAa'],
    ['BBB','bbb','bBb'],
    ['CCC','ccc','cCc'],
];
dictionariesIterator($data,$list);
var_dump($list);

function dictionariesIterator($data,&$list,$length = 0)
{
    if(count($data) <= $length)
    {
        return null;
    }
    if(empty($list))
    {
        $list = $data[$length];
    }
    else
    {
        $new = [];
        foreach($list as $value)
        {
            foreach($data[$length] as $value1)
            {
                $new[] = $value.'-'.$value1;
            }
        }
        $list = $new;
    }
    dictionariesIterator($data,$list,$length + 1);
}

补充一个使用循环的实现
现:保证数组的序列是有序的连续的

$data = [
    ['AAA', 'aaa', 'aAa'],
    ['BBB', 'bbb', 'bBb'],
    ['CCC', 'ccc', 'cCc'],
];

$result = [];
foreach (array_keys($data) as $k) {
    $tmp = [];
    if (empty($result)) {
        $result = $data[$k];
    } else {
        foreach ($result as $item1) {
            foreach ($data[$k] as $item2) {
                $tmp[] = $item1 . '-' . $item2;
            }
        }
        $result = $tmp;
    }
}
var_dump($result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题