将会话保存在数组中并计算平均值
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>
对于我书中的作业,我需要制作一个 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>