PHP - 生成数组中的所有项目组合
Posted
技术标签:
【中文标题】PHP - 生成数组中的所有项目组合【英文标题】:PHP - Generate all combinations of items in array 【发布时间】:2020-02-01 17:34:12 【问题描述】:我有一个这样的 php 数组...
$myarray = array(
'red', 'yellow', 'green, 'blue'
);
顺序对我来说并不重要,所以我想我正在尝试计算 combinations
而不是 permutations
。我想把这个拿回来......
$finalarray = array(
'Red', 'Green',
'Red', 'Yellow',
'Red', 'Blue',
'Green', 'Yellow',
'Green', 'Blue',
'Yellow', 'Blue'
);
是否有内置的 PHP 功能可以实现这一点,或者有没有办法通过循环来做到这一点?
【问题讨论】:
algorithm that will take numbers or words and find all possible combinations的可能重复 How to generate in PHP all combinations of items in multiple arrays的可能重复$finalarray
真的是你写的,还是成对的集合?
【参考方案1】:
您当然可以使用置换库,但您必须按字母顺序对每个子数组 sort
并使用 array_unique()
删除重复项。
或者您可以尝试提高成本效益:
$myarray = array(
'red', 'yellow', 'green', 'blue'
);
$result = [];
while ($item = array_pop($myarray))
foreach($myarray as $couple)
$result[] = [$item, $couple];
print_r($result);
第一件事是你每一步都在减少一个源数组,每个上下文都应该有它的数组副本。这意味着,如果您愿意将机制封装在递归函数中以生成两个以上的成员数组,则需要防止它们的内部副本被它们自己的上下文的 array_pop
之外的任何东西更改。
为了解释上面的代码,我从源数组的顶部弹出一个元素,然后遍历幸存的元素以耦合一对。这样我就不会将“red”与“red”配对,也不会产生无序的重复。
【讨论】:
【参考方案2】:下面这个例子
$myarray = array( 'red', 'yellow', 'green', 'blue' );
$finalarray = [];
for ($i = 0; $i < count($myarray); $i++)
for ($j = $i + 1; $j < count($myarray); $j++)
$finalarray[] = $myarray[$i];
$finalarray[] = $myarray[$j];
print_r($finalarray);
会打印出来
Array ( [0] => red [1] => yellow [2] => red [3] => green [4] => red [5] => blue [6] => yellow [7] => green [8] => yellow [9] => blue [10] => green [11] => blue )
【讨论】:
这是复制结果。 有问题写的是顺序对他来说并不重要,所以代码会按照所有者的意愿打印结果。在示例中,他也有重复.. 逻辑是 1、2、3、4 数字 1、2、1、3、1、4、2、3、2、4、3、4 据我所知,那就是他想要什么。 他想要组合,而不是排列。这就是为什么它不是一个重复的问题 imo。以上是关于PHP - 生成数组中的所有项目组合的主要内容,如果未能解决你的问题,请参考以下文章