【问题标题】:Is there any way to run for loop for decimal number in php?有没有办法在php中为十进制数运行for循环?
【发布时间】:2018-11-11 12:56:24
【问题描述】:

我需要使用 php FOR 循环显示带有十进制数字的选择框。见以下代码:

<select name="animationDelayTime">
    <option value="0.1">0.1s</option>
    <option value="0.2">0.2s</option>
    <option value="0.3">0.3s</option>
    <option value="0.4">0.4s</option>
    <option value="0.5">0.5s</option>
    <option value="0.6">0.6s</option>
    <option value="0.7">0.7s</option>
    <option value="0.8">0.8s</option>
    <option value="0.9">0.9s</option>
    <option value="1.0">1.0s</option>
    <option value="1.1">1.1s</option>
    <option value="1.2">1.2s</option>
    <option value="1.3">1.3s</option>
</select>

这个循环会一直持续到第 10 位。

是否可以在 php 中循环十进制数?

如果可能的话,任何人都可以检查以下不起作用的代码。我 从数据库中获取数据,我使用条件语句 选择并显示在选择框中选择的现有记录:

<select class="form-control" name="delayTime" title="Choose animation delay time..." data-toggle="tooltip" required>
<?php
 for ($x = 0.1; $x <= 10.1; $x=$x+0.1) {
  if($x == $updateEntry->delayTime){
   echo '<option value="' .$x.'" selected>'.$x.'s</option>';
  }
   echo '<option value="' .$x.'">'.$x.'s</option>'.PHP_EOL;
 }
?>
</select>

请看下面的屏幕截图。应该在选择框中选择值7.1,但它没有选择,只有开头的两个或三个数字被选中,不知道为什么?请帮我整理一下。

终于找到了在foreach循环中使用range来解决这个问题的方法。见下文:

<?php
 foreach (range(0.1, 10, 0.1) as $val) {
   $selected = ($val == $updateEntry->delayTime) ? "selected": "";
    echo '<option value="' . $val . '" '.$selected.'>' . $val . 's</option>';
 }
?>

【问题讨论】:

  • 对于这样的问题,您应该分享您尝试过的内容以及哪些内容不起作用

标签: php html for-loop


【解决方案1】:

您可以通过多种方式做到这一点。例如使用for() 循环。从0.1开始,一直到10,每一步递增0.1

range() 也是一个不错的选择,但你必须使用foreach()

<?php
  echo '<select name="animationDelayTime">';
  for ($x = 0.1; $x <= 10; $x=$x+0.1) {
   echo '<option value="' .$x.'">'.$x.'s</option>'.PHP_EOL;
  }
  echo '</select>';  
?>

演示: https://3v4l.org/RlAcM

编辑:根据新的要求更改。这里我只是假设$updateEntry-&gt;delayTime 的值为0.5。您可以像从 DB 中获取它一样使用它。

<select class="form-control" name="delayTime" title="Choose animation delay time..." data-toggle="tooltip" required>
<?php
 //$selected = '';
 for ($x = 0.1; $x <= 10.1; $x=$x+0.1) {
   $selected = ($x == 0.5) ? "selected": "";     
   echo '<option value="' .$x.'" '.$selected.'>'.$x.'s</option>'.PHP_EOL;
 }
?>
</select>

【讨论】:

  • 感谢您的帮助。
  • 你能再检查一下我的问题吗,我遇到了一个非常奇怪的问题。
  • @PawanMall 我只是假设 $updateEntry-&gt;delayTime 的值是 0.5 然后它按预期工作,对于 0.5 选项是 selected 查看演示3v4l.org/iLRIW 你只需要做一些调整。我还根据您的新要求编辑了我的答案。让我知道你想要还是不想要?
  • 我检查了您的代码,但遇到同样的问题如果我更改值,3v4l.org/6CqbW
  • 最后我通过在 foreach 循环中使用 range 解决了这个问题,感谢大家的支持。非常感谢:)
【解决方案2】:

简单的range:

// first `0.1` - start value, `10` - end value, second `0.1` - step
foreach (range(0.1, 10, 0.1) as $val) {  
    echo '<option value="' . $val . '">' . $val . 's</option>';
}

【讨论】:

  • 感谢好友的所有帮助。我得到了我想做的事。
  • 我发现这个答案更好。我不知道为什么,但是当我使用接受的答案作为($x = 89.0; $x &lt;= 108.0; $x=$x+0.1) 设置我的值时,我得到很多行正确回显,但有几行返回为“94.89999999999”等。
【解决方案3】:

你可以使用 While 循环:

// Initialize the variable
$val = 0.1; 

// Loop until the value is less than or equal to 10
while ($val <= 10) {  

    // generate the string using $val
    echo '<option value="' . $val . '">' . $val . 's</option>';

    // Increment the value by 0.1 for next iteration
    $val += 0.1; 
}

【讨论】:

    【解决方案4】:

    试试这个

    For( $x = 0 ; $x < 1.4; $x += 0.1){
    
    echo "<option value='$x'>".$x."s</option>";
    }
    

    【讨论】:

    • 递增 0.1
    猜你喜欢
    • 1970-01-01
    • 2020-09-14
    • 2019-07-11
    • 2019-08-24
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多