【问题标题】:php switch case: if we have 30 options, do we have to create 30 if statements or is there an easier way?php switch case:如果我们有 30 个选项,我们必须创建 30 个 if 语句还是有更简单的方法?
【发布时间】:2023-03-14 23:45:01
【问题描述】:

我在下面找到了这段代码,它非常适合我想要的,但是我有 30 多个选项,我还能做些什么来缩短代码吗?

<html>
<body>
    <form method="post" action="?">
    <select name="dropdown">
    <option value="Jehzeel1">Jehzeel1</option>
    <option value="Jehzeel2">Jehzeel2</option>
    <option value="Jehzeel3">Jehzeel3</option>
    </select>
    <input type="submit" value="submit">
    </form>
</body>
</html>



    <?php
    switch ($_POST['dropdown'])  { 

        case "Jehzeel1":
         echo "Jehzeel likes apples";
        break;

        case "Jehzeel2":
         echo "Jehzeel likes bananas";
        break;

        case "Jehzeel3":
         echo "Jehzeel likes oranges";
        break;

    ?>

【问题讨论】:

  • 在这种情况下,还是一般情况下?
  • 或者根本没有开关,将值存储在您的/数据库/数组中,通常开关用于逻辑而不是数据选择。
  • 回显将是 css 它将覆盖核心样式表

标签: php arrays drop-down-menu switch-statement


【解决方案1】:

创建映射数组更容易:

$map = array(
    'Jehzeel2' => 'Jehzeel likes bananas';
    'Jehzeel3' => 'Jehzeel likes oranges';
);

echo $map[$_POST['dropdown']];

虽然您可能需要对代码结构三思而后行,但这似乎是一种不好的做法。

捷径:

<?php
$fruits = array('apples', 'oranges', 'bananas');
?>
<form method="post">
    <select name="dropdown">
    <?php foreach ($fruits as $fruit) : ?>
        <option value="<?php echo $fruit ?>"><?php echo $fruit ?></option>
    <?php endforeach; ?>
    </select>
    <input type="submit" value="submit" />
</form>
<?php
if (in_array($_POST['dropdown'], $fruits)) {
    echo 'Jehzeel likes ' . $_POST['dropdown'];
}
?>

编辑

你可以通过稍微改变数组和 if 语句来使用 url:

$urls = array('url1' => 'http://www.facebook.com/', 'url2' => 'http://www.google.com/', 'url3' => 'http://www.yahoo.com/');

if (isset($urls[$_POST['dropdown']])) {
    echo 'URL: ' . $urls[$_POST['dropdown']];
}

【讨论】:

  • 我将其干燥,然后将水果名称存储在数组中。
  • @Wooble 那会是更好的方法,但他没有要求。好吧,至少不是特别...
  • “我可以做些什么来缩短代码”似乎涵盖了...缩短代码。
  • 哪种方式有效且最好
  • @user1757516 我用更短的代码方式编辑了我的答案。众多可能性之一
【解决方案2】:

考虑将选项的值更改为:

<select name="dropdown">
    <option value="apples">Jehzeel1</option>
    <option value="bananas">Jehzeel2</option>
    <option value="oranges">Jehzeel3</option>
</select>

然后只需在您的 php 代码中:

$valid_fruits = array("apples", "bananas", "oranges");

$fruit = $_POST['dropdown'];
if(in_array($fruit,$valid_fruit))
    echo "Jehzeel likes $fruit"

我希望它有所帮助。干杯

【讨论】:

  • 一种有效的方法;但是,这样您就无法验证用户输入。我可以将 HTML 更改为 Strawberries 并将该值注入应用程序。不一定是问题,但需要注意。
【解决方案3】:

您可以使用一个数组,其中值作为键,文本作为值:

 // array of key/value pairs
 $text = array(
     "Jehzeel1" => "apples",
     "Jehzeel2" => "bananas",
     "Jehzeel3" => "oranges",
 );
 // create your key from the post value, make sure it is actually set
 $key = isset($_POST['dropdown']))? $_POST['dropdown'] : "";
 // echo the value based on the key, if the key exists
 $value = (array_key_exists($key, $text))? $text[$key] : "nothing";
 // assuming all the text starts with "Jehzeel likes" you can sprintf the value
 echo sprintf("Jehzeel likes %s.", $value);

【讨论】:

    【解决方案4】:

    使用您的选项创建一个数组

    $DropdownLabels = array (
        'dropdown1' => 'Dropdown1 Long Label',
        'dropdown2' => 'Dropdown2 Long Label',
        // ...,
    );
    

    然后使用$DropdownLabels[$_POST['dropdown']] 并使用array_key_exists($_POST['dropdown'], $DropdownLabels) 测试它是否存在。

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 2019-03-08
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2023-02-18
      相关资源
      最近更新 更多