方法一:
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;
}
数组中计算并比较取出最大和最小值
最新推荐文章于 2022-09-11 15:11:04 发布