【问题标题】:Remove uneven prices from list of price从价格列表中删除不均匀的价格
【发布时间】:2022-06-10 23:50:56
【问题描述】:

我有这样的价格数组

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

上面是 price 的列表,其中很少有 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 并将其添加到我的新数组中。如何从价格数组中删除这个奇数。请注意我的数组大小通常超过 1000。解决方案可以是 php 或 javascript。谢谢。

请注意价格可以从 200 开始,也可以在 400 结束.. 但我只是想检查一下当前的数字是否不均匀。

【问题讨论】:

  • "0、300、301等奇数" 0和300是偶数
  • 这个问题很困惑......在发现你搞乱了奇数和偶数的含义之前,我建议如何检查偶数/奇数......加上 301-300 它是1 而不是零。加上你说的和你的代码不一致。
  • "它被添加到我的新数组中" 你是说 300 和 301 被添加到 $fresharray 中吗?无法重现。 print_r($fresharray); 为你输出了什么?
  • 您的意思是“异常值”而不是奇数吗? (与预期范围不同的统计显着值,请参阅en.wikipedia.org/wiki/Outlier
  • 不要与$arr中的前一个元素比较,而是与$fresharr中最新添加的元素进行比较

标签: javascript php


【解决方案1】:

首先,既然你说有一个价格范围,你应该在 foreach 周围加上一个 if 忽略超出你范围的值,解决你的问题,即 0 导致下一个值被添加到 @987654321 @:

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

这里“最新号”的定义是模棱两可的。根据您在问题中所说的,您的意思似乎是 $arr 中的前一个数字。为此,您只需要在 foreach 结束时分配一个值 $lol 的值,以便下一次迭代可以读取它。

另外,将$fresharray[] = $lol; 放入 if 而不是 else。现在,代码添加了$lol$diffnot 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2023-02-10
    • 2022-01-20
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多