PHP中的动态选择数组

时间:2012-06-25 21:03:43

标签: php javascript

我在PHP中有一个像这样的标准表单数组。我需要以15分钟的增量计算长达10小时的劳动力,每15分钟或每小时40分钟的值为10。是否可以使用PHP将其自动化为某种类型的数组,而不是对这些值中的每一个进行硬编码?看起来应该有一个更好的方法,我不知道如何开始?

<select size="1" name="labor" id="labor">
    <option value="80">2 Hours</option>
    <option value="70">1 Hour 45 min.</option>
    <option value="60">1 Hour 30 min.</option>
    <option value="50">1 Hour 15 min.</option>
    <option value="40">1 Hour</option>
    <option value="30">45 Minutes</option>
    <option value="20">30 Minutes</option>
    <option value="10">15 Minutes</option>
</select>

4 个答案:

答案 0 :(得分:2)

您需要两个值,即10个单位的增量和用户显示的值。在for(或其他变量)上运行$i循环,从1到40并计算循环内的值:

  • 10-increment很容易,只需将$i乘以10。
  • 对于显示的值,乘以15得到总分钟数。然后使用modulo operator(给出分钟)和标准divison(以获得小时数)将其转换为小时和分钟。

答案 1 :(得分:2)

可能最容易对解决方案进行硬编码。我认为这是@Wrikken提到的那种情况之一,因为它使代码非常干净且易于维护(想象一下在一两年内回到这里)。此外,使用数据库表也可以很好地处理这种情况。

首先使用数组存储值和描述:

$list = array();
$list['10'] = '15 Minutes';
....

然后遍历整个数组以生成下拉列表:

<select size="1" name="labor" id="labor">
<?php
   foreach($list as $value => $desc){
     $option = "<option value=$value>" . $desc . "</option>";
     echo $option;
   }
?>
</select>

答案 2 :(得分:1)

这应该这样做。将$ i的起始编号更改为下拉列表应包含的总分钟数。现在设定为750分钟。

echo '<select>';
for ($i = 750; $i >= 15; $i -= 15) {

    $hours = $i / 60;
    $min = $i % 60;

    echo '<option>';

    if ($hours >= 1)
        echo floor($hours)." Hours ";

    if ($min > 1) 
        echo $min." Minutes";

    echo '</option>';
}
echo '</select>';

注意:此代码并不完美,起始编号需要均匀分配15才能生成所需的结果(但是,它可以正常工作)。

答案 3 :(得分:0)

类似的东西:

<select size="1" name="labor" id="labor">
<?php 
for ($x = 1; $x < 11; $x++) {
    echo '<option value="';
    echo $x*10;
    echo '">';
    echo $x*15;
    echo " Minutes</option>";
}
?>
</select>

在那里扔一个if语句将它分开,这样一旦(x / 10 * 15)> 60,它就会开始持续数小时而不是75/90/105/120分钟。