gpt4 book ai didi

php - 从数组值组合计算最接近的匹配

转载 作者:可可西里 更新时间:2023-11-01 01:06:23 25 4
gpt4 key购买 nike

为了举例,我有一个零件长度数组:-

array(150, 180, 270);

然后我有一个测量值 ($a = 440)

我需要计算长度大于$a 的两个最接近 的可能组合,而无需手动编写数百种可能的组合来计算。

所以:

150
180
270

150 + 150
150 + 180
150 + 270

180 + 180
180 + 270

270 + 270

150 + 150 + 150
150 + 150 + 180

..等等。

这将需要运行一定次数,而不是仅仅找到前两个匹配项然后停止,因为 150 + 150 + 150 将是一个更接近匹配 $a 而不是 270 + 270 但可能会在之后运行。

编辑:我还需要存储构成匹配的部分组合,最好是在一个数组中。

我希望我已经解释得足够好,让其他人能够理解。

最佳答案

由于这是一个占用大量资源的脚本,我认为最好提供预先生成选项的选项,然后使用该数据创建一个变量/对象/sql 脚本来永久存储数据。例如,做类似的事情

SELECT * FROM combination_total WHERE size > YOUR_SIZE ORDER BY size ASC LIMIT 2;

我的新脚本很相似,但它只是生成一个所有组合的数组,没有任何重复项。好像又很快了。请注意 $maxLength 变量,当前设置为 2000,可以使用您自己的最大可能大小进行修改。

<?php
$partLengths = array(150, 180, 270);
$currentCombinations = array(
array(
'total' => 150,
'combination' => array(150)
),
array(
'total' => 180,
'combination' => array(180)
),
array(
'total' => 270,
'combination' => array(270)
)
);
$maxLength = 2000;
$largestSize = 0;

function generateCombination() {
global $currentCombinations, $largestSize, $partLengths;
$tmpCombinations = $currentCombinations;
foreach ($tmpCombinations as $combination) {
foreach ($partLengths as $partLength) {
$newCombination = $combination['combination'];
$newCombination[] = $partLength;
sort($newCombination);

$newCombinationTotal = array_sum($newCombination);

if (!combinationExists($newCombination)) {
$currentCombinations[] = array(
'total' => $newCombinationTotal,
'combination' => $newCombination
);
}

$largestSize = ($newCombinationTotal > $largestSize) ? $newCombinationTotal : $largestSize;
}
}
}

function combinationExists($combination) {
global $currentCombinations;
foreach ($currentCombinations as $currentCombination) {
if ($combination == $currentCombination['combination']) {
return true;
}
}
return false;
}

while ($largestSize < $maxLength) {
generateCombination();
}

// here you can use $currentCombinations to generate sql/object/etc
var_dump($currentCombinations);
?>

关于php - 从数组值组合计算最接近的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924897/

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