我正在尝试设置一个基本的 PHP 代码,它可以扫描数字并根据一组特定条件计算总数。在这里,我是说我想将 100 到 200 之间的所有偶数且是 5 的倍数的数字相加。为此,我想我可以先将这些数字放入一个数组中,然后将数组相加。
类似这样的:
<?php
$total = 0;
$naturalNumber = array();
$naturalNumber[] = $i;
while ($i % 2 == 0 && $i % 5 == 0) {
for($i>=100; $i <=200; $i++) {
$naturalNumber[] = $i;
$total = array_sum($naturalNumber);
}
}
echo "<p>$total</p>";
?>
但是出现错误:
cannot use [] for reading
,这里也有语义问题吗?
您的
for
循环不正确:
for($i>=100; $i <=200; $i++) {
^^
for
的第一个参数应该是一个值的赋值,你没有这样做,你只是测试$i
是否大于100,这是没有意义的。 $i
从来没有被定义过,所以你实际上是在尝试迭代 (null >= 100) -> 200
-> false -> 200
-> 0 -> 200
。
你想要
for($i = 100; $i <=200; $i++) {
^---note this
相反。
加上
while
和 for
的嵌套也只是......奇怪。为什么首先是while
?您所需要的只是 for
循环和内部的 if
进行各种 %
测试。
正如“@Marc B”先生清楚地提出了这个解决方案,但我想分享我自己的意见。 你也可以这样做,
<?php
$total = 0;
$naturalNumber = array();
//array_push($naturalNumber, $i);
for($i=100; $i <=200; $i++) {
if ($i % 2 == 0 && $i % 5 == 0) {
array_push($naturalNumber, $i);
}
}
$total = array_sum($naturalNumber);
echo "<p>$total</p>";
?>
针对您的具体场景,我们可以烘焙您的阶乘要求,以生成非常简洁的解决方案。因为您的起始值是一个合格值,并且所有可被 5 和 2 整除的合格值也将被 10 整除。
$start = 100;
$end = 200;
$step = 10;
echo array_sum(range($start, $end, $step));
现在,如果您想要在阶乘要求方面更加动态,您可以使用
for()
循环,并通过检查每个迭代数字是否可被所有所需因子整除来有条件地排除数字。
代码:(演示)
$factors = [2, 5];
$total = 0;
for ($i = $start; $i <= $end; ++$i) {
foreach ($factors as $f) {
if ($i % $f !== 0) {
continue 2;
}
}
$total += $i;
}
echo $total;
两个片段都会产生
1650
。