对于带有foreach循环的循环吗? PHP

时间:2014-01-24 17:54:39

标签: php mysql arrays foreach

我试图让以下事情发生。

通过for循环并生成一组包含时间选项的7个选择框。我现在这个循环工作正常。这是一个表格,其中包含一周中每一天的活动开始时间。

对于想要更改值的用户,我想生成相同的7个框但是在数据库中输入的值的每个我想要添加该日期的原始选定值,并提供请选择的值为的盒子。

时间循环

foreach ($times as $time) {
    echo '<option value="' . $time['num'] . '"'; if ($event == $time['dec']){echo 'selected="selected"';};
            echo '>';
            echo $time['clock'];
            echo '</option>';
}

Times Array

$times = array( array('num' => 70000, 'dec' => '07:00:00', 'clock' => '7:00am'), array('num' => 71500, 'dec' => '07:15:00', 'clock' => '7:15am') etc…

这会产生选择选项。

然后foreach获取现有值。

foreach ($event -> Selected as $select) {
   $event = $select -> Start;
}

现在这一切都正常工作但是如果存在3条记录则只产生3个选择,我想产生7个选择,前3个选择带有DB值,如果存在3个记录而4个空选择

2 个答案:

答案 0 :(得分:1)

该数组仅包含有限数量的条目,因此循环将仅迭代到此数字。

您可以通过检查数组中有多少元素并为其余元素输出空值来解决此问题。

例如在循环后添加以下内容:

$count = 7 - count($times);
for($i = 0; $i < $count; $i ++)
{
    echo '<option></option>';
}

以上是一个简单的循环,输出空条目以确保有7个下拉值。

答案 1 :(得分:0)

你可以在你的foreach之前做到这一点:

$desired = 7;
$extra = array_fill(0, $desired - count($times));
$times = array_merge($times, $extra);

它会使您的数组$times始终与$desired中的数字一样长。