5

我在 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

4 回答 4

2

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

  • 10 增量很容易,只需乘以$i10。
  • 对于显示的值,乘以 15 以获得总分钟数。然后使用模运算符(为您提供分钟)和标准除法(以获取小时)将其转换为小时和分钟。
于 2012-06-25T21:09:34.417 回答
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>
于 2012-06-25T21:22:11.807 回答
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>';

NOTE: This code is not perfect, the start number needs to be evenly divided with 15 to generate your desired result, (however, it works).

于 2012-06-25T21:24:03.483 回答
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 分钟。

于 2012-06-25T21:09:12.670 回答