Привет, я пытаюсь понять некоторый код в PHP, мне дали задание сделать базовый ввод таблицы умножения, я понял эту часть. Я также должен изменить порядок вывода таблицы. Таким образом, вместо примера, работающего от 1 x 10 = 10 вниз, я должен изменить этот порядок с 10 x 10 = 100 вниз. Эту часть я не могу понять. output
if (isset($_POST['calculate'])) {
$start = $_POST['startNumber'];
$end = $_POST['endNumber'];
$times = $_POST['times'];
for($start; $start <= $end; $start++) {
$answer = $start * $times;
echo $start, " x ", $times, " = ", $answer, "<BR>";
}
}
3 ответа
Вы можете настроить свой исходный код, но вместо того, чтобы сразу выводить его, добавьте его к текущему выводу в начале. Вывод результата в конце
if (isset($_POST['calculate'])) {
$start = $_POST['startNumber'];
$end = $_POST['endNumber'];
$times = $_POST['times'];
$output = '';
for($start; $start <= $end; $start++) {
$answer = $start * $times;
$output = $start . " x " . $times ." = " . $answer . "<BR>" . $output;
}
echo $output;
}
Самый простой способ, который я могу придумать, - это создать массив с range
, начиная с конечного значения. При этом вы можете просто перебирать числа и выполнять свои расчеты.
Демонстрация, http://sandbox.onlinephpfunctions.com/code/727cb873fa8d5567157bfcd03f4bde5f4da574>
<?php
$start = 1;
$end = 10;
$multiplier = 10;
$reversed = range($end, $start);
foreach ($reversed as $input) {
echo sprintf('%s x %s = %s %s', $input, $multiplier, $input * $multiplier, "\n");
}
range($end, $start)
?
Вместо этого вы можете просто нажать на массив, перевернуть массив после цикла, соединить массив в строку, а затем повторить вывод.
Также будьте осторожны с вводом данных пользователем. В этом случае я полагаю, что вы ожидаете целые числа, поэтому я привел их для вас.
if (isset($_POST['calculate'])) {
$start = (int)$_POST['startNumber'];
$end = (int)$_POST['endNumber'];
$times = (int)$_POST['times'];
$out = [];
for(; $start <= $end; $start++) {
$answer = $start * $times;
$out[] = "$start x $times = $answer<br>";
}
$out = array_reverse($out);
echo implode('',$out);
}
Кроме того, вы можете просто пройти цикл в обратном порядке:
if (isset($_POST['calculate'])) {
$start = (int)$_POST['startNumber'];
$end = (int)$_POST['endNumber'];
$times = (int)$_POST['times'];
for(; $end >= $start; $end--) {
$answer = $end * $times;
echo "$end x $times = $answer<br>";
}
}
Более понятный цикл, вероятно, включал бы range:
if (isset($_POST['calculate'])) {
$start = (int)$_POST['startNumber'];
$end = (int)$_POST['endNumber'];
$times = (int)$_POST['times'];
foreach(range($end, $start) as $i) {
echo "$i x $times = ". ($i * $times) ."<br>\n";
}
}
Вы также можете добавить в array_map, если хотите:
if (isset($_POST['calculate'])) {
$start = (int)$_POST['startNumber'];
$end = (int)$_POST['endNumber'];
$times = (int)$_POST['times'];
array_map(function($i) use ($times){
echo "$i x $times = ". ($i * $times) ."<br>\n";
}, range($end, $start));
}
Или вы можете просто избежать всего этого и просто поменять местами параметры $start и $end.
Итак, вместо этого:
$start = $_POST['startNumber'];
$end = $_POST['endNumber'];
Использовать это:
$end = $_POST['startNumber'];
$start = $_POST['endNumber'];
Но любезно также обращайтесь с данными, отправленными пользователями, с осторожностью, в противном случае их прямое эхо позволяет им вставлять HTML на страницу и выполнять такие действия, как запуск JavaScript. Лучше всего привести его к типу int или float в вашем случае, так как код ожидает, что он будет таким. Помещение (int)
впереди приведет к приведению типов Это. Вы также можете использовать (float) или (double) и т. д. Вы также можете делать такие вещи, как выполнение сначала математической операции, например, умножение на 1 и т. д. В других ситуациях, когда вы работаете не с числами, а со строками, вы d обычно используют htmlentities или htmlspecialchars перед выводом строки, подобной вводу, который пользователь отправил обратно в html, чтобы он правильно экранировался для отображения как текст внутри html, а не позволять им использовать html и/или запускать javascript и т. д.
Таким образом, вместо:
$start = $_POST['startNumber'];
$end = $_POST['endNumber'];
Вы бы имели:
$end = (int)$_POST['startNumber'];
$start = (int)$_POST['endNumber'];
Или же:
$end = (float)$_POST['startNumber'];
$start = (float)$_POST['endNumber'];
Или
$end = $_POST['startNumber'] * 1;
$start = $_POST['endNumber'] * 1;
И т.п.
Если бы мне пришлось выбирать лично, я бы выбрал диапазон.
$end
вместо $start
в цикле for. Например, sandbox.onlinephpfunctions.com/code/…
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
for($end; $end >= $start; $end--) {
?̶e̶n̶d̶N̶u̶m̶b̶e̶r̶
̶ ̶ и̶t̶i̶m̶e̶s̶
̶? ̶ Почему бы не раз вывешиваем начальный и конечный? ̶ Nevermind, я вижу это сейчас.$start
...$end
, где$times
является множителем. Таким образом, для таблицы «2 раза» значение будет равно 2.