使用数组进行PHP简单计算

时间:2016-09-22 16:35:44

标签: php arrays

所以我有一个简单的for循环来从任何给定的数字(get)得到这个结果 1 + 2 + 3 + 4 = 10

$num = intval($_GET["number"]);
$total = 0;

for ($i = 1; $i <= $num; $i++) {

    echo $i;

    if ($i != $num) {
        echo " + ";
    } 
    $total += $i;
}
    echo " = " . $total;

现在我要显示每一步的计算
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10
它应该用一个数组完成,但我似乎无法弄清楚算法。 我想我在这里忽略了一些简单的东西。

6 个答案:

答案 0 :(得分:1)

尝试这样的事情:

<?php
$num = intval($_GET["number"]);

//add all numbers to an array
$numbers = array();
for ($i = 1; $i <= $num; $i++)
{
  $numbers[] = $i;
  //show each array element with ' + ' in between the elements
  echo implode(' + ', $numbers);

  //show total sum
  echo " = " . array_sum($numbers) . "\n";
}
?>

请注意,如果$_GET['number']为零或甚至低于零,则此操作无效。

答案 1 :(得分:1)

您实际上并不需要循环来执行arithmetic progression。像这样的算术级数可以使用公式n * (n[-1] + n[1]) / 2以恒定时间计算。

例如4的进展,其中n1 = 1n2 = 2n3 = 3n4 = 4只是4 * (4 + 1) / 2 == 10

function progression($n) {
    return $n * ($n + 1) / 2;
}

echo progression(4); // 10

但是,要显示任何给定步骤的进展结果,您只需限制该进程的上限(即$n)。

$n = 4;
for ($i = 1; $i <= $n; $i++) {
    $operands = implode('+', range(1, $i));
    echo $operands . " = " . progression($i), "\n";
}

输出

1 = 1
1+2 = 3
1+2+3 = 6
1+2+3+4 = 10

概括

这适用于任何线性算术级数,无论上限/下限。例如,5到8的进度仍然是4 * (5 + 8) / 2,它会为您提供26

因此,您可以将此函数修改为任何线性算术级数的更通用的解决方案。

function progression($size, $start = 1) {
    return $size * ($start + ($size + $start - 1)) / 2;
}

$n = 4;
$start = 5;
for ($i = $start; $i <= $n + $start - 1; $i++) {
    $operands = implode('+', range($start, $i));
    echo $operands . " = " . progression($i - $start + 1, $start), "\n";
}

输出

5 = 5
5+6 = 11
5+6+7 = 18
5+6+7+8 = 26

答案 2 :(得分:1)

这是我能想到的最简单的方式......

$num = intval($_GET['number']);
$intArray = range(1,$num);

echo implode(" + ",$intArray)." = ".array_sum($intArray);

答案 3 :(得分:0)

因此,假设您正在使用$_GET['number']数字进行范围,那么您可以执行类似的操作(请参阅代码中的注释以获得进一步说明):

//This will create an array from 1 to number inclusive
$nums = range(1, $_GET['number']);
//The nums that have been used
$used = array();
//Now loop over that array
foreach($nums as $num){
    $used[] = $num; //Add this number to used
    if(count($used) > 1){//Dont care about first loop
        echo  implode(' + ', $used); // put all elements together by + sign
        echo ' = ' . array_sum($used) . "<br>"; //Show total plus a break
    }
}

答案 4 :(得分:-1)

<?php

$num = intval($_GET["number"]);
$terms = [1];

for ($i = 2; $i <= $num; $i++) {
    $terms[] = $i;
    $sum = array_sum($terms);
    echo implode(' + ', $terms) . ' = ' . $sum . PHP_EOL;
}

答案 5 :(得分:-1)

最大限度地使用PHP数组相关函数:

$num = intval($_GET["number"]);
$array = range(1, $num);

for ($i = 2; $i <= $num; $i ++)
{
    $slice = array_slice($array, 0, $i);
    $total = array_sum($slice);
    echo implode(" + ", $slice) . " = " . $total . PHP_EOL;
}

替代array_push

$num = intval($_GET["number"]);
$array = array(1);

for ($value = 2; $value <= $num; $value ++)
{
    array_push($array, $value);
    echo implode(" + ", $array) . " = " . array_sum($array) . PHP_EOL;
}

<强>输出

1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 4 = 10