Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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_Html - Fatal编程技术网

Php 在“选择选项”中显示周

Php 在“选择选项”中显示周,php,html,Php,Html,我已经有了这样的选择选项: <?php echo 'Age : <select id="age" name ="age" class="selecta">'; for($i = 0; $i <= 24; $i += 0.25) { ?> <option value="<?php echo $i ;?>" <?php if ($_SESSION['age'] == $i) {

我已经有了这样的选择选项:

<?php
    echo 'Age : <select id="age" name ="age" class="selecta">';
    for($i = 0; $i <= 24; $i += 0.25) 
    { 
?>
    <option value="<?php echo $i ;?>" 
    <?php
    if ($_SESSION['age'] == $i) 
    { 
        echo " selected='selected'"; 
    } 
    ?> > 
    <?php echo $i .'&nbsp&nbsp' ?>
    </option>  
    <?php 
    }
    echo '</select> months <br />';
?>
0      // 0month
1 week  
2 weeks
3 weeks
4 weeks  
1 month
1 month and 1 week
1 month and 2 weeks
.....
24 months
但对于用户来说,它看起来不太好。所以我想要的是让他们像这样:

<?php
    echo 'Age : <select id="age" name ="age" class="selecta">';
    for($i = 0; $i <= 24; $i += 0.25) 
    { 
?>
    <option value="<?php echo $i ;?>" 
    <?php
    if ($_SESSION['age'] == $i) 
    { 
        echo " selected='selected'"; 
    } 
    ?> > 
    <?php echo $i .'&nbsp&nbsp' ?>
    </option>  
    <?php 
    }
    echo '</select> months <br />';
?>
0      // 0month
1 week  
2 weeks
3 weeks
4 weeks  
1 month
1 month and 1 week
1 month and 2 weeks
.....
24 months
这并不是我最后的愿望,但我希望是那样的


这可能吗?

实际上,在for循环中,可以使用一些简单的算法和内置函数来分解$i的值。也许你可以做如下的事情:

$months = intval($i);
$weeks = ($i - floatval($months)) / .25;
echo "{$months} month(s) and {$weeks} week(s)";
然后将这些步骤中的任何一个映射到特定的数字:

$map = function($step) {
    return $step * 0.25;
}
例如,这将创建以下序列:

0, 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, ... , 23, 23.25, 23.5, 23.75, 24
所以现在你不想要这些数字,只想要美好的月份。如果您更容易地执行以下步骤(而不是小数),则可以计算它们:

month: floor($step / 4)   - division (integer)
weeks: $step % 4          - modulo   (integer)
或作为将其转换为文本的映射函数:

$map = function ($step) {
    $month = floor($step / 4);
    $week  = $step % 4;

    $buffer = '';

    if ($month) {
        $buffer .= "$month month";
    }

    if ($week) {
        if ($month) {
            $buffer .= ' and ';
        }

        $buffer .=  "$week week" . ($week == 1 ? '' : 's');
    }

    return $buffer;
};
例如:

$map(0)   # (empty)
$map(1)   # 1 week
$map(10)  # 2 month and 3 weeks
$map(95)  # 23 month and 3 weeks
$map(96)  # 24 month
因此,现在您只需将范围作为键映射到其值,然后就可以使用这些值执行选择框的标准输出:

$list = range(0, 96);

$selected = 12; // $_SESSION['age']

echo "Age : \n<select id='age' name ='age' class='selecta'>\n";
foreach ($list as $value)
{
    $label = $map($value);
    printf("  <option value='%d'%s>%s</option>\n", $value, $value === $selected ? " selected='selected'" : '', $label);
}
echo "</select>\n";
$list=范围(0,96);
$selected=12;//$_会话[“年龄”]
回显“年龄:\n\n”;
foreach($列为$value)
{
$label=$map($value);
printf(“%s\n”,$value,$value====$selected?“selected='selected'”:$label);
}
回音“\n”;
这将为您提供输出():

年龄:
1周
2周
3周
1个月
...
2个月零3周
3个月
3个月1周
...
12个月零2周
12个月零3周
13个月
13个月1周
13个月零2周
...
23个月
23个月零1周
23个月零2周
23个月零3周
24个月

forloop出现这种奇怪的
for
loop有什么特别的原因吗?使用嵌套循环,所以每个月都有一个循环来增加3周。是的,这是我的梦想,但我做不到。你只给出了变量,哪一个将循环,以及如何实现。你的意思是你的代码中的
/0.25
?它的目的是在你已经拥有的for循环中使用块(使用for循环中的$i)。我认为你不需要0.25中的0,但我可能错了。我不能再投票了:(,我们必须要求这样才能允许向上投票两次:)只有一件事@hakre,我希望得到像我所做的那样的值
0,0.25,0,50…
而不是像那样
0,96
请参见第一个映射函数示例以获得提示:
$step*0.25
:)-但是您应该在这里使用整数。保持简单。@hakre,我不知道把
$step*0.25
放在哪里,你的代码是高级专家:),你能编辑你的演示链接来解决我的问题吗?我已经尝试了
$list=range(0,24,0.25)$list = range(0, 96);

$selected = 12; // $_SESSION['age']

echo "Age : \n<select id='age' name ='age' class='selecta'>\n";
foreach ($list as $value)
{
    $label = $map($value);
    printf("  <option value='%d'%s>%s</option>\n", $value, $value === $selected ? " selected='selected'" : '', $label);
}
echo "</select>\n";
Age : 
<select id='age' name ='age' class='selecta'>
  <option value='0'></option>
  <option value='1'>1 week</option>
  <option value='2'>2 weeks</option>
  <option value='3'>3 weeks</option>
  <option value='4'>1 month</option>
  ...
  <option value='11'>2 month and 3 weeks</option>
  <option value='12' selected='selected'>3 month</option>
  <option value='13'>3 month and 1 week</option>
  ...
  <option value='50'>12 month and 2 weeks</option>
  <option value='51'>12 month and 3 weeks</option>
  <option value='52'>13 month</option>
  <option value='53'>13 month and 1 week</option>
  <option value='54'>13 month and 2 weeks</option>
  ...
  <option value='92'>23 month</option>
  <option value='93'>23 month and 1 week</option>
  <option value='94'>23 month and 2 weeks</option>
  <option value='95'>23 month and 3 weeks</option>
  <option value='96'>24 month</option>
</select>