2013-04-03 121 views
0

我爲開始時間選擇和結束時間創建一個下拉列表。我有3個數組,time_group,time_name和dotw。最終的結果是這樣的:PHP從數組項目創建變量

星期一[下拉列表] - [下拉列表]
週二[下拉列表] - [下拉列表]
週三[下拉列表] - [下拉列表] 等等等等

我想在實際頁面上使用預設變量檢查一個sql行。

$char_avail_start_monday = $row['char_avail_start_monday']; 
$char_avail_stop_monday = $row['char_avail_stop_monday']; 
中度過每一天我下面循環的代碼

現在,創造每一個與每個正確的值兩個下拉菜單中。然而,我有一個IF語句,如果db單元格爲空,則執行X,if = to Y做某事等等。看起來我的編碼工作不正確。我創建了$ {char_avail_start _}。$ dotw [$ d](例如:$ char_avail_start_monday),它並不指向我想要查看的預定義行。

//this is using my previous variable 
    echo "row has ".$char_avail_start_monday ." "; 
    //this is using my attempt at generating it and seeing it it can pull from the row 
    echo "row has " .${char_avail_start_}.$dotw[$d] ." <br/>"; 

我得到的輸出是:

「行有2000行有星期一」

這似乎只是$ dotw [$ d]部分。我想不可能做什麼?或者我只是做錯了?

的完整代碼:

<?php 

//CREATE START TIMES ARRAY 
$time_group = array('0000', '0030', '0100', '0130', '0200', '0230', '0300', '0330', '0400', '0430', '0500', '0530', '0600', '0630', '0700' 
    , '0730', '0800', '0830', '0900', '0930', '1000', '1030', '1100', '1130', '1200', '1230', '1300', '1330', '1400', '1430', '1500', '1530' 
    , '1600', '1630', '1700', '1730', '1800', '1830', '1900', '1930', '2000', '2030', '2100', '2130', '2200', '2230', '2300', '2330'); 

//CREATE FORMATED TIME ARRAY 
$time_name = array('Midnight', '12:30 AM', '01:00 AM', '01:30 AM', '02:00 AM', '02:30 AM', '03:00 AM', '03:30 AM', '04:00 AM', '04:30 AM', '05:00 AM', '05:30 AM', '06:00 AM', '06:30 AM', '07:00 AM' 
    , '07:30 AM', '08:00 AM', '08:30 AM', '09:00 AM', '09:30 AM', '10:00 AM', '10:30 AM', '11:00 AM', '11:30 AM', 'Noon', '12:30 PM', '01:00 PM', '01:30 PM', '02:00 PM', '02:30 PM', '03:00 PM', '03:30 PM' 
    , '04:00 PM', '04:30 PM', '05:00 PM', '05:30 PM', '06:00 PM', '06:30 PM', '07:00 PM', '07:30 PM', '08:00 PM', '08:30 PM', '09:00 PM', '09:30 PM', '10:00 PM', '10:30 PM', '11:00 PM', '11:30 PM'); 

$dotw = array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'); 
?> 

<table width="425" border="0"> 

<?  
//Loop through the days of the week *DOTW* array 
$d = 0; 
while ($d <= 6) { 
?> 
    <tr> 
     <?php 
     //echo "test: " .${char_avail_start_}.$d; 
      if (${char_avail_start_}.$d == ""){ 
       echo "<td width=\"190\" scope=\"col\"><span style=\"color: red\"><b>".ucfirst($dotw[$d])."</b></span></td>"; 
      } else { 
       echo "<td width=\"190\" scope=\"col\">".ucfirst($dotw[$d])."</td>"; 
      } 
     ?> 

<td scope="col"> 
<?php 

//here is my test code to see if its defined 
if (${char_avail_start_}.$dotw[$d] == "2000"){ 
    echo "2000 FOUND\n"; 
    } else { 

    //this is using my previous variable 
    echo "row has ".$char_avail_start_monday ." "; 
    //this is using my attempt at generating it and seeing it it can pull from the row 
    echo "row has " .${char_avail_start_}.$dotw[$d] ." <br/>"; 
} 

echo "<select name=\"char_avail_start_".$dotw[$d]."\" id=\"char_avail_start_".$dotw[$d]."\">\n"; 

//FIRST BLANK OPTION 
if (${char_avail_start_}.$d == ""){ 
    echo "<option value=\"\" selected=\"selected\"></option>\n"; 
    } else { 
    echo "<option value=\"\"></option>\n"; 
} 

$i = 0; 
while ($i <= 47) { 
    echo "<option value=\"".$time_group[$i]."\">".$time_name[$i]."</option>\n"; 
    $i++; 
} 
echo "</select>\n"; 

echo "-\n"; 

echo "<select name=\"char_avail_stop_".$dotw[$d]."\" id=\"char_avail_stop_".$dotw[$d]."\">\n"; 


//FIRST BLANK OPTION 
if (${char_avail_stop_}.$d == ""){ 
    echo "<option value=\"\" selected=\"selected\"></option>\n"; 
    } else { 
    echo "<option value=\"\"></option>\n"; 
} 
$i = 0; 
while ($i <= 47) { 
    echo "<option value=\"".$time_group[$i]."\">".$time_name[$i]."</option>\n"; 
    $i++; 
} 
echo "</select></td></tr>\n"; 

$d++; 
} 
?> 
</table> 
+1

順便說一句:通過使用短標籤('<?'),您正在尋求麻煩。 –

+0

如果配置一次,將不會有套路。 – Anton

回答

0

所以我做錯了。與更多的藏品,發現一個錯誤。
if (${char_avail_start_}.$dotw[$d] == ""){ blah }

需要的是......
if (${char_avail_start_.$dotw[$d]} == ""){ blah }

要是我尾隨}在錯誤的地方。

然後它能夠​​引用我以前定義的變量。
$char_avail_start['monday'] = $row['char_avail_start_monday'];
etc...

和數據拉從SQL Server背部沒有問題。

0

如果我理解正確的話這將是更好地爲您創建一個包含可用值天的數組:

$char_avail_start = array(); 
$char_avail_start['monday'] = $row['char_avail_start_monday']; 
$char_avail_start['tuesday'] = $row['char_avail_start_tuesday]; 
... 

然後,您可以動態地訪問變量使用這樣的事情:

echo "row has " . $char_avail_start[$dotw[$d]] . "<br/>";