Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的动态选择数组_Php_Javascript - Fatal编程技术网

PHP中的动态选择数组

PHP中的动态选择数组,php,javascript,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 Ho

我有一个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>

2小时
1小时45分钟。
1小时30分钟。
1小时15分钟。
1小时
45分钟
30分钟
15分钟
类似于:

<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分钟。

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

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>';
  • 10的增量很容易,只要将
    $i
    乘以10即可
  • 对于显示的值,乘以15得到总分钟数。然后使用(给出分钟)和标准除法(得到小时)将其转换为小时和分钟

    • 可能是硬编码解决方案的最简单方法。我认为这是@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>
      

      这应该可以。将$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>';
      
      echo';
      对于($i=750;$i>=15;$i-=15){
      $hours=$i/60;
      $min=$i%60;
      回声';
      如果($hours>=1)
      回声地板(小时)。“小时”;
      如果($min>1)
      echo$min.“分钟”;
      回声';
      }
      回声';
      

      注意:这段代码并不完美,需要将起始数字平均除以15才能生成您想要的结果(但是,它是有效的)。

      除非您看到增量随时间变化(10分钟、5分钟等),否则您知道硬编码很好,并且使用PHP重新计算的速度更快?当然,您可以使用一些PHP代码生成一次列表,并将该代码作为注释放在旁边,让某人在一年左右的时间内快速抓取并使用稍微不同的变量重新创建列表,然后列表再次保持静态。使用
      floor()
      not
      round()
      我使用了硬代码,即使没有阵列,我也可以在以后轻松更改选项。有道理。谢谢你的帮助!