2014-01-24 532 views
0

我正在嘗試做以下事情。For循環與它的foreach循環? PHP

通過for循環併產生一組7個選擇框,其中包含時間選項。我現在有這個循環正常工作。這是針對一週中每一天的活動開始時間的表單。

對於想要更改值的用戶,我想要生成相同的7個盒子,但是在數據庫中輸入的每個值都希望添加該日期的原始選定值,並提供請選擇值箱子的。

foreach循環的時間

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

時報陣列

$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個空選擇

+0

您是否嘗試過'$ times = array_merge($ times,array_fill(0,7-count($ times)));'在您的'foreach()'之前創建7個元素? –

回答

1

該數組只包含有限數量的條目,因此該循環只會迭代到該數字。

您可以通過檢查數組中有多少元素以及爲其餘元素輸出空值來解決此問題。

例如添加以下在循環之後:

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

上面是一個簡單的循環,其輸出空條目,以確保有7下拉值。

0

您可以將您的foreach之前:

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

它會使你的陣列$times要始終只要$desired數量。