我正在尝试找到介于0之间且超出限制且超过此限制的2个数字之间的单位数。这是我的功能。它工作正常,直到我必须处理一些需要花费大量时间来处理的巨大数字。我试图找到一种方法来执行此代码而不使用循环。
public function getBetween($num1, $num2) {
$limit = 500000;
$array = array(0,0,0);
if ($num1 >= $num2) {
$low = $num2;
$high = $num1;
} else {
$low = $num1;
$high = $num2;
}
for($i=$low; $i < $high; $i++) {
if ($i < 0) {
$array[0]++;
} elseif ($i >= 0 && $i < $limit) {
$array[1]++;
} else {
$array[2]++;
}
}
return $array;
}
我已经开始将我的循环拆分为elseif语句,但这很快就变得混乱了,我最终也必须设置多个不可能使用的限制。
if ($low < 0 && $high < 0) {
} elseif ($low < 0 && $high >= 0 && $high < $limit) {
} elseif ($low < 0 && $high >= $limit) {
} elseif ($low >= 0 && $low < $limit && $high < 0) {
} elseif ($low >= 0 && $low < $limit && $high >= 0 && $high < $limit) {
} elseif ($low >= 0 && $low < $limit && $high >= $limit) {
} elseif ($low >= $limit && $high < 0) {
} elseif ($low >= $limit && $high >= 0 && $high < $limit) {
} elseif ($low >= $limit && $high >= $limit) {
}
我正在努力寻找一种干净的方法来做到这一点。有什么想法吗?
修改
这是我想要获得的数组的示例。
如果我的限制为500,$num1
= -100且$num2
= 700我会得到数组
$array[0] = 100
$array[1] = 500
$array[2] = 200
答案 0 :(得分:1)
我没有测试它(没有运行PHP脚本,但我通过一些示例“手动”尝试了它。)
你仍然有循环,但每个限制只有一次迭代(而不是每个单位一次)。
// Example datas
$limits = array(0, 500, 800);
$low = -100;
$high = 1000;
$splittedResults = array();
// Get total of units
$totalUnits = abs($high - $low);
$totalCounted = 0;
foreach($limits as $limit) {
if ($low > $limit) {
// Nothing under the limit
$nbUnderLimit = 0;
} elseif($high < $limit) {
// Both values under the limit
$nbUnderLimit = $totalUnits;
} else {
// $low under the limit and $high over it
$nbUnderLimit = abs($limit - $low);
}
// Here we know how much units are under current limit in total.
// We want to know how much are between previous limit and current limit.
// Assuming that limits are sorted ascending, we have to remove already counted units.
$nbBetweenLimits = $nbUnderLimit - $totalCounted;
$splittedResults[] = $nbBetweenLimits;
$totalCounted += $nbBetweenLimits;
}
// Finally, number of units that are over the last limit (the rest)
$splittedResults[] = $totalUnits - $totalCounted;
答案 1 :(得分:0)
您可以使用range()创建数字数组并使用array_filter
$count = sizeof(array_filter (range(0,800), function($value){ return ($value > 500); }));
一个用于&lt;等等。
您只需要单独定义范围数组一次。