Php 防止值重叠
我有以下数组Php 防止值重叠,php,arrays,algorithm,Php,Arrays,Algorithm,我有以下数组 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 我想防止重叠,我
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;
}
}
while(列表($i,$v)=每个($data)){
如果(!empty($data[$i+1][“margin”])){
如果($data[$i+1][“margin”]-$v[“margin”])我的建议是通过数组递归:
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>";
函数f($i)
{
全球$n,$利润;
//检查索引是否超出范围
如果($i<$n)
{
//跳过数组中的第一个边距
如果($i>0)
{
//如果达到30,则停止
如果($margins[$i]['margin']3),
数组('margin'=>7),
数组('margin'=>15),
数组('margin'=>25),
数组('margin'=>30)
);
var_dump($margins);echo“”;
//初始化$n
$n=计数($margins);
//调用递归函数
f(1);
var_dump($margins);echo“”;
这是因为边距数组的大小很小,较大的数组将使用内存资源