gpt4 book ai didi

php - 打印给定数组中子范围的所有组合

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:27 25 4
gpt4 key购买 nike

我想打印给定数组中子范围的所有组合。我有一个包含 y 个元素的数组,我想从中打印连续子范围的所有组合。

约束是:每个子范围应该至少有 2 个元素,并且子范围中的每个元素应该是连续的。它应该共享每个元素的相同边框。

例如,我们有一个包含 7 个元素的数组 [11,12,13,14,11,12,13]

因此,子范围组合的总数将为 [7 * (7-1)/2] = 21

所以,输出将是这样的:

11,12

12,13

13,14

14,11

11,12

12,13

11,12,13

12,13,14

13,14,11

...

11,12,13,14 and so on (total 21 combination as per above array)

我们不应该打印任何不连续的组合。示例:[11,12,14] 不是有效组合,因为它跳过了中间的元素“13”。

我能够打印 2 个元素的组合,但我很难打印超过 2 个元素的组合。

以下是我到目前为止尝试过的方法。

$data=array("11","12","13","14","11","12","13");
$totalCount=count($data);

for($i=0;$i<$totalCount;$i++){
if(($i+1) < ($totalCount)){
echo "[".$data[$i].",".$data[$i+1]."]<br>";
}
}

最佳答案

你可以这样做:

$arr = [11,12,13,14,11,12,13];

function genComb($arr, $from = 1, $to = -1) {
$arraySize = count($arr);
if ($to == -1) $to = $arraySize;
$sizeLimit = $to + 1;
for ($i = $from; $i < $sizeLimit; $i++) { // size loop
$indexLimit = $arraySize - $i + 1;
for ($j = 0; $j < $indexLimit; $j++) { // position loop
yield array_slice($arr, $j, $i);
}
}
}

$count = 0;
foreach (genComb($arr, 2) as $item) {
echo implode(',', $item), PHP_EOL;
$count++;
}

echo "total: $count\n";

关于php - 打印给定数组中子范围的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com