从价格表中删除不均衡价格



我有一个像这样的价格数组

$arr = [200,201,203,205,207,300,209,212,0,211,0,0,301,213,214];

以上是报价单,其中有少量不均匀数字如0,300,301

我试图通过以下代码删除那些奇数

$fresharray = [];
foreach($arr as $lol)
{
$diff =  $lol-$arr[$i-1];
if($diff <-50 || $diff > 50)
{

}
else 
{
$fresharray[] = $lol;
}

$i++;
}

我基本上是比较当前数字与以前的数字,如果差异大于50,我将其排除到我的fresharray,但我的问题是当有两个0像0,0或300,301..这里的差是0和-1它被加到我的fresh数组中。我如何从我的价格数组中删除这些奇数…请注意,我的数组大小通常大于1000。解决方案可以在php或javascript。

请注意,价格也可以从200到400起。但我只是想检查一下当前的数字是否不均匀。

首先,既然你说有一个价格范围,你应该用一个if包围foreach的内部,忽略范围之外的值,解决你的问题,其中0导致下一个值被添加到$fresharray:

if ($lol >= 200 && $lol <= 400)

"最新数字"的定义这是模棱两可的。从你在问题中所说的,似乎你指的是$arr中的前一个数字。为此,您只需要在foreach结束时为$lol赋值一个值,以便下一次迭代可以读取它。

同样,将$fresharray[] = $lol;放在if而不是else中。现在,代码添加$diff而不是$lol。<-50或>50。这可能就是为什么在包含[...,300,301,...]的数组中301被添加到$fresharray

这是修改后的结果代码:

<?php
$arr = [200, 201, 203, 205, 207, 300, 209, 212, 0, 211, 0, 0, 301, 213, 214];
$fresharray = [];
$latest = $arr[0]; //Initialize $latest to avoid warnings
foreach ($arr as $lol) {
if ($lol >= 200 && $lol <= 400) { //Ignore prices outside range
$diff =  $lol - $latest;
if ($diff < -50 || $diff > 50) {
$fresharray[] = $lol;
}
$latest = $lol;
}
}

最新更新