2013-04-03 5 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] (ex: $ 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

BTW: используя shorttags ('

+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 без проблем.

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/>";