【问题标题】:Help with PHP and associative arrays帮助 PHP 和关联数组
【发布时间】:2011-02-27 01:34:40
【问题描述】:

我必须根据用户的输入和选择字段中的选择在 php 中做一个简单的计算器,如下所示:

<?php
$a = $_GET['a'];
$b = $_GET['b'];

$array = array( "option1" => 0.1,
                    "option2" => 0.15,
                    "option3" => 0.3,
                    "option4" => 3,
                    "option5" => 3,
                    "option6" => 16,
                    "option7" => 16,
                    "option8" => 16
                    );

echo "<form action='calc.php' method='get'>";
echo "<input type='text' name='a' value='".$a."'> of ";
echo "<select name='b'>";
foreach ($array as $k => $v) {
    echo "<option value='".$v."'>".$k."</option>";
}
echo "</select> ";
echo "<input type='submit' value='='> ";

$total_volume = $a * $b;

echo $total_volume;

echo "</form>";
?>

好吧,现在一切正常,但想法是,在用户提交表单后,页面会重新加载输入字段中的已发送金额和用户实际选择的选项...

第一件事很简单:我只是在我的输入字段中输入了value="a",但我不确定如何在&lt;select&gt; 字段中选择一个选项???

我是从这个开始的:

foreach ($array as $k => $v) {
        echo "<option value='".$v."'";
        if ($b == $v) {
            echo " selected ";
        }
        echo ">".$k."</option>";
    }

...但这显然没有按预期工作...请帮我解决这个简单的问题:)

谢谢!

【问题讨论】:

  • 你写的foreach代码应该没问题。您可能希望使用 echo ' selected="selected"'; 而不是不符合 XHTML 的 echo ' selected'; 虽然

标签: php arrays associative-array calculator


【解决方案1】:

您需要回显'selected="selected"' 之类的内容。其余代码对我来说似乎很好。

再次考虑存在结构上的错误,因为多个选项返回相同的值,导致提交表单后无法选择正确的选项。

您需要将$k 作为循环中选择的值发送,并且对于您的计算,您只需使用$array[$b] 而不是$b

<?php
$a = $_GET['a'];
$b = $_GET['b'];

$array = array( "option1" => 0.1,
                    "option2" => 0.15,
                    "option3" => 0.3,
                    "option4" => 3,
                    "option5" => 3,
                    "option6" => 16,
                    "option7" => 16,
                    "option8" => 16
                    );

echo "<form action='calc.php' method='get'>";
echo "<input type='text' name='a' value='".$a."'> of ";
echo "<select name='b'>";
foreach ($array as $k => $v) {
        echo "<option value='".$k."'";
        if ($b == $k) {
            echo ' selected="selected"';
        }
        echo ">".$k."</option>";     // or $v if you want to show the number
}
echo "</select> ";
echo "<input type='submit' value='='> ";

$total_volume = $a * $array[$b];

echo $total_volume;

echo "</form>";
?>

【讨论】:

  • 我同意结构化代码非常重要。在我看来,糟糕的代码是缺乏专业性
  • 我认为您的第二个想法是最接近我的解决方案的 :) 我绝对应该在我的表单中发送所选选项的字符串,对吗?
  • @errata,是的,如果你想区分选择了什么选项,值必须是唯一的,比如 option1 ... option8
  • 是的,我也想到了 :) 但是在我的情况下如何发送带有表单的 $k 以便我可以在最后使用 $_GET 获取它?
  • @errata,我对您的代码做了两处小的修改,见上文。
【解决方案2】:

试试这个:

foreach ($array as $k => $v) {
   $selected= ($b == $v) ? 'selected="selected"' : '';
   echo "<option value='$v' $selected>$k</option>\n";
}

【讨论】:

    【解决方案3】:

    您必须在 $_GET 中捕获数据。 试试看

    foreach ($_GET as $k => $v) {
            echo "<option value='".$v."'";
            if ($b == $v) {
                echo " selected ";
            }
            echo ">".$k."</option>";
        }
    

    编辑:

    在我的电脑上它在这里工作的是 GET 的转储

            <form action='' method='get'>
        <input type='text' name='a' value='121'> of <select name='b'>
    <option value='0.1'>option1</option>
    <option value='0.15'>option2</option>
    <option value='0.3'>option3</option>
    <option value='3'>option4</option>
    <option value='3'>option5</option><option value='16'>option6</option><option value='16'>option7</option><option value='16'>option8</option></select> <input type='submit' value='='> 363
        </form> 
    

    网址

    http://localhost/test.php?a=121&b=3

    及参数

    一个 121 b 3

    【讨论】:

    • 抱歉,这是完全错误的。提交 2 个值将为您的代码提供 2 个选项,其中包含值 1213 以及文本 ab
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多