从多维数组项构建唯一的字符串列表

瓦迪姆

我有一个多维数组:

$items = array(
   array("A1", "A2", "A3"),
   array("B1","B2","B3","B4"),
   array("C1","C2","C3","C4","C5"),
   array("D1","D2","D3")); 

我需要建立一个唯一字符串列表,每个字符串都应包含每个数组中的一项,如下所示:

A1 B1 C1 D1
A1 B1 C1 D2
A1 B1 C1 D3
A1 B1 C2 D1
A1 B1 C2 D2
等等

上面的示例数据应产生180个组合(3 * 4 * 5 * 3 = 180)。

困难在于,代码(最好)应适用于任意数量的数组。不仅仅是上面示例中的4。

例如,我要添加:array("E1", "E2");并且代码仍然可以正常工作。

一个更简单的版本可能适用于固定的数组集,例如4(如上例所示)。

当然,我可以使用for循环,但是在这种情况下for,每次我添加另一个数据数组时,都需要添加另一个循环(不是那么通用,对吗?)。

这是我尝试过的方法,但没有解决:

$items = array(
   array("A1", "A2", "A3"),
   array("B1","B2","B3","B4"),
   array("C1","C2","C3","C4","C5"),
   array("D1","D2","D3"));

$depth = count($items);
$index = $depth - 1;

for ($i = 0; $i <= $index; $i++) {
   $depth2 = count($items[$i]);
   $index2 = $depth2 - 1;
   echo "SET: ";
   for ($i2 = 0; $i2 <= $index2; $i2++) {
      echo $items[$i2][$i].", ";
   }
   echo "<br>";
}

预期结果是180个唯一字符串的列表,例如:

A1 B1 C1 D1
A1 B1 C1 D2
A1 B1 C1 D3
A1 B1 C2 D1
A1 B1 C2 D2
等等

戈戈伦

您可以使用递归来构建结果集,类似于使用回溯对数组进行排列的方式。想法是每次将每个数组中的每个项目都包含进去,并将其添加到进行中的结果中,然后递归该可能性。在探索了给定元素的所有结果可能性之后,我们将其从进一步考虑中丢弃,然后继续进行下一个元素,重复该过程。

<?php

function combos($items, &$curr=[], &$res=[], $i=0) {
    if ($i >= count($items)) {
        $res[]= $curr;
    }
    else {
        foreach ($items[$i] as $e) {
            $curr[]= $e;
            combos($items, $curr, $res, $i + 1);
            array_pop($curr);
        }
    }

    return $res;
}

$items = [
    ["A1", "A2", "A3"],
    ["B1","B2","B3","B4"],
    ["C1","C2","C3","C4","C5"],
    ["D1","D2","D3"]
];
$i = 0;

foreach (combos($items) as $combo) {
    echo str_pad($i++ . ": ", 5, " ", false) . implode(" ", $combo) . "\n";
}

输出:

  0: A1 B1 C1 D1
  1: A1 B1 C1 D2
  2: A1 B1 C1 D3
  3: A1 B1 C2 D1
  4: A1 B1 C2 D2
  5: A1 B1 C2 D3
  6: A1 B1 C3 D1
  7: A1 B1 C3 D2
...
172: A3 B4 C3 D2
173: A3 B4 C3 D3
174: A3 B4 C4 D1
175: A3 B4 C4 D2
176: A3 B4 C4 D3
177: A3 B4 C5 D1
178: A3 B4 C5 D2
179: A3 B4 C5 D3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将多维numpy数组转换为字符串列表

如何从列中获取唯一的字符串列表?

从字符串列表生成随机唯一项

通过字符串子字符串获取唯一的字符串列表

获取给定字符串的唯一子字符串列表

在字符串列表中计算相等的字符串并使它们唯一

在字符串列表中查找唯一的字符串

从需要.split(',')的字符串列表中高效创建多维数组

字符串列表的python argparse选择接受唯一的部分列表元素

如何将字符串列表转换为唯一的单个字符?

解析XML字符串并构建字符串列表

字符串列表的索引数组

字符串列表中的Haskell数组

整数数组的字符串列表

在实现动态数组类中查找错误。构建字符串列表后崩溃

将唯一的数组项过滤到选择列表中

从 Python Dataframe 列中提取唯一的字符串列表

为具有重复项的字符串列表生成唯一的ID

如何创建唯一的映射并使用流创建给定属性的字符串列表?

将唯一字符串列表保存在ArrayList中

用于模型估计的唯一变量字符串列表

为每个熊猫数据框单元格的字符串列表分配唯一值

按分隔符在 Column 中创建唯一子字符串列表

字符串列表中的最小唯一子序列

一种匹配字符串数组和字符串列表的方法

动态提取bash中字符串列表中每个字符串唯一的模式

OpenSkyApi:字符串数组还是字符串列表?

计算python中多维数组中唯一字符串的数量

获取一些字符串之间的数组或字符串列表(搜索多个字符串)