5

私はこのようなPHPの標準形配列を持っています。15分ごとの値として10を使用して、15分刻みで最大10時間の労働を考慮する必要があります。つまり、1時間あたり40時間です。これらの各値をハードコーディングする代わりに、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単位の増分とユーザーが表示する値の2つの値が必要です。for1から40までのループ(または他の変数)を実行し、ループ$i内の値を計算します。

  • 10インクリメントは簡単で、$i10を掛けるだけです。
  • 表示された値については、15を掛けて合計分数を求めます。次に、モジュロ演算子(分を与える)と標準の除算(時間を取得する)を使用して、それを時間と分に変換します。
于 2012-06-25T21:09:34.417 に答える
2

おそらく、ソリューションをハードコーディングするのが最も簡単です。これは、@Wrikkenが述べたように、コードが非常にクリーンで保守が容易になるため、問題ない状況の1つだと思います(1年か2年でこれに戻ることを想像してください)。さらに、この状況は、データベース テーブルでも非常にうまく処理できます。

最初に配列を使用して値と説明を保存します。

$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>';

注: このコードは完全ではありません。目的の結果を生成するには、開始番号を 15 で均等に分割する必要があります (ただし、機能します)。

于 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 に答える