将会话保存在数组中并计算平均值

Save a session in an array and calculate the average

对于我书中的作业,我需要制作一个 PHP 文档,该文档可以使用数组类型的 SESSION 计算系列 (x) 插入变量的平均值...

这是我关于 Whosebug 的第一个问题,它可能是一个愚蠢的问题。 我已经尝试查找一些答案,这可能非常简单,但我不知道如何将输入保存在会话变量中,然后计算它的平均值。

这是我目前拥有的:

<!DOCTYPE html>
<html>
<head>
    <title>Gemiddelde</title>
</head>
<body>

<strong>Test Form</strong>
<form action="" method="get">
    <input type="text" name="cijfer">
    <input type="submit" name="add" value="add">
</form>

<?php 
    session_start();

        if (isset($_GET['add'])) { 
            $cijfer = array('ingevoerd' => $_SESSION['cijfer'] = $_GET['cijfer']);
        }
?> 

<?php
echo $_SESSION['cijfer'].'<br>';
?>

</body>
</html>

你可以在这里找到一个例子:

您仅将最新输入 ($_GET['cijfer']) 隐式分配给 $_SESSION['cijfer'],覆盖任何先前的值。当您使用 = 操作时会发生这种情况,我不确定您是否有意这样做。

该分配的结果也存储在 $cijfer['ingevoerd'] 中,但该值从未在您的脚本中使用。 因此,您当前的所有脚本所做的就是获取当前输入的 'cijfer',将其存储在会话中,然后输出它,忘记之前得到的所有内容。

这是一个略有改进且评论较多的版本。它首先将新输入的数字放入一个变量中并检查输入是否有效。如果是,则将其转换为实际的浮点数,并将其附加到数组 'ingevoerd',然后回显计数。

我不想把它全部泄露出去,所以我希望你能详细说明如何从这个数组计算平均值。 :)

<?php 
  // This needs to be called first, because a cookie needs to be set,
  // which needs to happen before any content is outputted.
  session_start(); 
?><!DOCTYPE html>
... rest of your HTML goes here, left out for brevity ...

<?php
// Take the raw input into a variable. That's easier to work with.
$cijfer = $_GET['cijfer'];

// Check for numeric input. ctype_digit() will do if you want just integers.
// For floats, is_numeric(), or some regular expression might be a better check.
if (!ctype_digit($cijfer)) {
  die('Only numbers, please');
}

// Add the new input. I cast to float here to already have numbers in the 
// array, which makes calculating easier.
// The `[]` is a syntax for appending to an array. You may also use the 
// more explicit array_push function.
$_SESSION['ingevoerd'][] = (float)$cijfer;

echo count($_SESSION['ingevoerd']) . ' numbers in the array';

// Calculate the average of all numbers in $_SESSION['ingevoerd'] and echo.
echo ....

一些一般性建议:在您的代码中要明确,尽量不要走捷径。在继续下一步之前,先将内容分配给变量。简单变量确实很便宜,没有理由不使用它们,但它使您的代码更容易理解,也更容易调试,因为您可以输出您执行的每个单独步骤的结果。

感谢@GolezTrol 和@Martin 的快速回复 我让作业尽可能简单。 代码现在有效:

编辑:现在我很开心:)

<!DOCTYPE html>
<html>
<head>
    <title>Average</title>
</head>
<body>

<strong>Test Form</strong>
<form action="" method="get">
    <input type="number" name="cijfer">
    <input type="submit" name="add" value="add">
</form>

<?php 
    session_start();
    // unset($_SESSION['cijfer']);
    $cijfer = $_GET['cijfer'];
        if (isset($_GET['add'])) {
            $_SESSION['cijfer'][] = $_GET['cijfer'];
        }
?>

<?php
    $count = count($_SESSION['cijfer']);
    $addingUp = array_sum($_SESSION['cijfer']);
    $amount = count($_SESSION['cijfer']);
    $outcome = $addingUp / $count;

    echo '<pre>';
    print_r($_SESSION['cijfer']);
    echo '</pre>';
    echo "The number of entered digits is:  ".$count;

    echo "<br />Added together: ".$addingUp;
    echo "<br />The average of everything together is: ".round($outcome, 1);
    if ($count > 10) {
        unset($_SESSION['cijfer']);
    }
?>

</body>
</html>