【问题标题】:Switch Statement with user input带有用户输入的 Switch 语句
【发布时间】:2018-09-19 01:47:10
【问题描述】:

提醒一下,我是编码新手。

我正在尝试创建一个 switch 语句,该语句将为用户提供他们输入到其正确罗马数字中的数字(仅限 1-10 的数字)。

<form action="#" method="post">
Type a number from 1-10. <input type="text" name="num"/>
<input type="submit" name="submit">
</form>


<?php

switch (isset($_POST['submit'])) {
    //$num = (int)$_POST["num"];
    case 1:
        echo "I";
        break;
    case 2:
        echo "II";
        break;
    case 3:
        echo "III";
        break;
    case 4:
        echo "IV";
        break;
    case 5:
        echo "V";
        break;
    case 6:
        echo "VI";
        break;
    case 7:
        echo "VII";
        break;
    case 8:
        echo "VIII";
        break;
    case 9:
        echo "IX";
        break;
    case 10:
        echo "X";
        break;
}


?>

目前,这就是我所拥有的,但我不知道如何让 switch 语句使用用户提供的数字。有什么帮助吗?

提前致谢。

【问题讨论】:

  • isset($_POST['submit'])returns true or false。你想在你的switch 之前测试它(尽管测试$_POST['num'] 会更有意义)然后使用switch($_POST['num'])

标签: php switch-statement


【解决方案1】:

用户将在其中输入数字的input 具有'num'name 属性,因此要获取用户输入的内容,您将使用$_POST['num']

// if the form has been submitted
if(isset($_POST['submit'])) {
  $num = (int) $_POST['num'];
  switch($num) {
    case 1:
        echo "I";
        break;
    case 2:
        echo "II";
        break;
    case 3:
        echo "III";
        break;
    case 4:
        echo "IV";
        break;
    case 5:
        echo "V";
        break;
    case 6:
        echo "VI";
        break;
    case 7:
        echo "VII";
        break;
    case 8:
        echo "VIII";
        break;
    case 9:
        echo "IX";
        break;
    case 10:
        echo "X";
        break;
    default:
        echo 'wrong number or you probably entered a number less than 1 or higher than 10';
  }
}

【讨论】:

  • -非常感谢。这帮了大忙。不知道 isset 必须在 switch 之前。
  • @CholoBoy 很高兴我能帮到你。 isset 函数主要用于检查表单提交时,learn more 关于它。
【解决方案2】:

首先你要确保你有东西 注意我正在使用 $_POST['num']

$num = $_POST['num'] ?? 0;

现在你检查

switch($num){
   case 1:
     echo 'I';
     break;
   case 2:
     echo 'II';
     break;

... 
...

我会做一些不同的事情,即使这样也不是最有效的转换。

echo (([1=>'I', 2=>'II',3=>'III',....,9=>'IX'])[$_POST['num']]) ?? '';

【讨论】:

  • 但是如果 OP 正在运行 PHP null coalesce operator 将无法识别,因为 ?? 不是有效的语法。
  • @ths 那确实会让人伤心,
【解决方案3】:

isset($_POST['submit']) 返回一个布尔值,它不是您的 switch 语句所期望的 1-10 范围内的整数。您可能打算使用$_POST['num']

数组是一种更紧凑的封装逻辑的方法,而不是冗长且可能容易出错的 switch 语句。每个数组索引映射到一个数字,如下所示:

<form action="#" method="post">
Type a number from 1-10. <input type="text" name="num">
<input type="submit" name="submit">
</form>

<?php

$numerals = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X'];

if (isset($_POST['num'])) {
    echo isset($numerals[$_POST['num']]) ? $numerals[$_POST['num']] : "error";
}

?>

【讨论】:

    【解决方案4】:

    您可以使用以下解决方案来解决您的问题:

    $input = $_POST['num'];
    if($input){
        switch($input) {
            ....
        }
    }
    

    【讨论】:

    • $_POST['num'] 应该包含数字而不是$_POST['submit']
    猜你喜欢
    • 2017-03-14
    • 2016-08-09
    • 2018-09-30
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多