2012-06-25 14 views
5

Mam standardową tablicę formularzy w PHP w ten sposób. Muszę uwzględnić do 10 godzin pracy w 15-minutowych przyrostach z 10 jako wartością za każde 15 min lub 40 na godzinę. Czy możliwe jest zautomatyzowanie tego w jakiejś tablicy z PHP zamiast twardego kodowania każdej z tych wartości? Wydaje się, że powinien istnieć lepszy sposób i nie mam pojęcia, jak zacząć?Tablica dynamicznego wyboru w PHP

<select size="1" name="labor" id="labor"> 
    <option value="80">2 Hours</option> 
    <option value="70">1 Hour 45 min.</option> 
    <option value="60">1 Hour 30 min.</option> 
    <option value="50">1 Hour 15 min.</option> 
    <option value="40">1 Hour</option> 
    <option value="30">45 Minutes</option> 
    <option value="20">30 Minutes</option> 
    <option value="10">15 Minutes</option> 
</select> 
+4

Jeśli nie widzisz inkrementów zmieniających się przez cały czas (10 minut, 5 minut itp.), Czy wiesz, że to jest w porządku i czy szybciej ponownie je kalkulujesz przez cały czas w PHP? Można oczywiście wygenerować listę raz z pewnym kodem PHP i pozostawić ten kod jako komentarz w pobliżu, aby ktoś mógł szybko pobrać, aby odtworzyć listę z nieco innymi zmiennymi za rok, po czym znowu pozostaje statyczny. – Wrikken

Odpowiedz

2

Prawdopodobnie najłatwiejsze do zakodowania na twardo rozwiązanie. Myślę, że jest to jedna z tych sytuacji, w których jest OK, jak wspomniał @Wrikken, ponieważ sprawia, że ​​kod jest bardzo czysty i łatwy w utrzymaniu (wyobraź sobie, że powrócisz do tego za rok lub dwa). Ponadto ta sytuacja może być również bardzo dobrze obsługiwana z tabelą bazy danych.

Pierwsze użycie tablicę do przechowywania Ci wartości i opisy:

$list = array(); 
$list['10'] = '15 Minutes'; 
.... 

Następnie pętla przez całą tablicę wygenerować listę rozwijaną:

<select size="1" name="labor" id="labor"> 
<?php 
    foreach($list as $value => $desc){ 
    $option = "<option value=$value>" . $desc . "</option>"; 
    echo $option; 
    } 
?> 
</select> 
+0

Poszedłem z twardym kodem, mogę łatwo zmienić opcje w późniejszym terminie, nawet bez tablicy. Ma sens. Dzięki za pomoc! –

0

Coś jak:

<select size="1" name="labor" id="labor"> 
<?php 
for ($x = 1; $x < 11; $x++) { 
    echo '<option value="'; 
    echo $x*10; 
    echo '">'; 
    echo $x*15; 
    echo " Minutes</option>"; 
} 
?> 
</select> 

rzucać w instrukcji if there aby oddzielić go tak, że raz (x/10 * 15)> 60 zaczyna przeniesienia na godziny zamiast 75/90/105/120 minut.

2

Potrzebne są dwie wartości: przyrost o 10 jednostek i wartość wyświetlana przez użytkownika. Uruchom for pętlę nad $i (lub innej zmiennej) od 1 do 40 i obliczyć wartości wewnątrz pętli:

  • 10-przyrost jest proste, wystarczy pomnożyć przez dziesięć $i.
  • Wyświetlaną wartość należy pomnożyć przez 15, aby uzyskać całkowitą liczbę minut. Następnie przekształć to w godziny i minuty, używając modulo operator (która podaje minuty) i standardowego podziału (aby uzyskać godziny).
1

To powinno wystarczyć. Zmień numer początkowy $ i na liczbę wszystkich minut, jakie powinno zawierać rozwijane menu. Teraz jest ustawiony na 750 minut.

echo '<select>'; 
for ($i = 750; $i >= 15; $i -= 15) { 

    $hours = $i/60; 
    $min = $i % 60; 

    echo '<option>'; 

    if ($hours >= 1) 
     echo floor($hours)." Hours "; 

    if ($min > 1) 
     echo $min." Minutes"; 

    echo '</option>'; 
} 
echo '</select>'; 

UWAGA: Ten kod nie jest doskonały, numer startowy musi być równo podzielona 15 wygenerować pożądany wynik, (jednak to działa).

+0

użyj 'floor()' not 'round() ' –