我有一个像这样的价格数组
$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;
}
}