gpt4 book ai didi

php - 防止值重叠

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

我有以下数组

array (size=5)
0 =>
array (size=1)
'margin' => 1
1 =>
array (size=1)
'margin' => 14
2 =>
array (size=1)
'margin' => 23
3 =>
array (size=1)
'margin' => 24
4 =>
array (size=1)
'margin' => 27

我想防止重叠,我的意思是每个值/间隔至少应相差 5,同时我不希望最终边距最大值超过 30。

并且边距应该只在当前值周围加上/减去,就像最终输出可以像下面这样

array (size=5)
0 =>
array (size=1)
'margin' => 1
1 =>
array (size=1)
'margin' => 14
2 =>
array (size=1)
'margin' => 19
3 =>
array (size=1)
'margin' => 24
4 =>
array (size=1)
'margin' => 29

到目前为止,我已尝试使用以下代码来检测重叠

while(list($i, $v) = each($data)) {

if(!empty($data[$i+1]["margin"])){

if(($data[$i+1]["margin"]-$v["margin"])<5)
echo "Overlapping index : ".($i+1).PHP_EOL;

}
}

但我在执行一些算法来移除重叠部分时遇到了困难。

P.S. all the data in array is sorted (margin wise).

有人可以帮我吗?提前致谢。

最佳答案

我的建议是通过你的数组重复出现:

function f($i)
{
global $n, $margins;
// check if index is not out of range
if ($i < $n)
{
// skip first margin in array
if ($i>0)
{
// stop if 30 is reached
if ($margins[$i]['margin'] <= 30)
{
// ajust margin if smaller than 5
if (($margins[$i]['margin'] - $margins[$i-1]['margin']) < 5)
$margins[$i]['margin'] = $margins[$i-1]['margin'] + 5;
// recurs to the next item in the array
f($i+1);
}
else
unset($margins[$i]);
}
else
f($i+1);
}
}

// initialize $margin
$margins = array(
array('margin'=>3),
array('margin'=>7),
array('margin'=>15),
array('margin'=>25),
array('margin'=>30)
);

var_dump($margins); echo "</br>";

// initialize $n
$n = count($margins);

// Call recursive function
f(1);

var_dump($margins); echo "</br>";

这是因为你的边距数组的大小很小,较大的数组会占用内存资源。

关于php - 防止值重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32538825/

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