数组中计算并比较取出最大和最小值

这里写图片描述

方法一:
if ($row) {
      $data = array();
      $arr = $row;
      $discrepancyValue = $abnormalValue = 0;
      //最小值
      do {
          foreach ($row as $ke => $va) {
              switch (count($va)) {
                  //一个批次重量取当前值
                  case 1:
                      $data[$ke]['min_value'] = current($va);
                      break;
                  //两个批次重量取最小值
                  case 2:
                      $data[$ke]['min_value'] = min($va);
                      break;
                  default:
                      //差异值 = 第二个数 - 第一个数
                      $discrepancyValue = $va[1] - reset($va);
                      //40% 异常批次重量 = 第二个数 * 0.4
                      $abnormalValue = $va[1] * 0.4;
                      //小于 40% 异常批次重量时取出最小值
                      if ($discrepancyValue < $abnormalValue) {
                          $data[$ke]['min_value'] = reset($va);
                      }
                      break;
              }
              if ($data[$ke]['min_value']) {
                  //释放整个数组
                  unset($row[$ke]);
              } else {
                  //将数组开头的单元移出数组 
                  array_shift($row[$ke]);
              }
          }
      } while ($row);
      //最大值
      do {
          foreach ($arr as $ke => $va) {
              switch (count($va)) {
                  //一个批次重量取当前值
                  case 1:
                      $data[$ke]['max_value'] = current($va);
                      break;
                  //两个批次重量取最大值
                  case 2:
                      $data[$ke]['max_value'] = max($va);
                      break;
                  default:
                      $key = count($va) - 2;
                      //差异值 = 最后一个数 - 倒数第二个数
                      $discrepancyValue = end($va) - $va[$key];
                      //40% 异常批次重量 = 倒数第二个数 * 0.4
                      $abnormalValue = $va[$key] * 0.4;
                      //小于 40% 异常批次重量时取出最大值
                      if ($discrepancyValue < $abnormalValue) {
                          $data[$ke]['max_value'] = end($va);
                      }
                      break;
              }
              if ($data[$ke]['max_value']) {
                  //释放整个数组
                  unset($arr[$ke]);
              } else {
                  //弹出数组最后一个单元(出栈)
                  array_pop($arr[$ke]);
              }
          }
      } while ($arr);
  }


方法二:
if ($row) {
    $data = array();
    $discrepancyValue = $abnormalValue = 0;
    //最小值
    foreach ($row as $ke => $va) {
        $count = count($va);
        for ($index = 0; $index < $count; $index++) {
            if ($count > $index + 1) {
                $discrepancyValue = $va[$index + 1] - $va[$index];
                $abnormalValue = $va[$index] * 0.4;
                if ($discrepancyValue < $abnormalValue) {
                    $data[$ke]['min_value'][] = $va[$index];
                }
            }
        }
    }
    //最大值
    foreach ($row as $ke => $va) {
       $count = count($va);
       for ($index = $count; $index > 0; $index--) {
           if ($count > $index) {
               $discrepancyValue = $va[$index] - $va[$index - 1];
               $abnormalValue = $va[$index - 1] * 0.4;
               if ($discrepancyValue < $abnormalValue) {
                   $data[$ke]['max_value'][] = $va[$index];
               }
           }
       }
    }
}


  if ($data) {
      var_dump($data);die;
  }

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值