2012-06-25 12 views
5

Ho un array di moduli standard in PHP come questo. Devo calcolare fino a 10 ore di lavoro in incrementi di 15 minuti con 10 come valore per ogni 15 min o 40 all'ora. È possibile automatizzare questo in una sorta di array con PHP invece di codificare ciascuno di questi valori? Sembra proprio che ci dovrebbe essere un modo migliore e non ho idea di come iniziare?Selezione dinamica array in 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

A meno che non si vedano incrementi che cambiano nel tempo (10 minuti, 5 minuti, ecc.), Si è consapevoli del fatto che l'hardcoding è corretto e più veloce è il rererer che calcola tutto ciò con PHP tutto il tempo? Ovviamente potresti generare l'elenco una volta con un po 'di codice PHP, e lasciare quel codice come un commento vicino a qualcuno da afferrare rapidamente per ricreare l'elenco con variabili leggermente diverse in un anno o giù di lì, dopo di che rimane statico. – Wrikken

risposta

2

Probabilmente il modo più semplice per codificare la soluzione. Penso che questa sia una di quelle situazioni in cui va bene come menzionato da @Wrikken, in quanto rende il codice molto pulito e facile da mantenere (immaginate di tornare su questo in un anno o due). Inoltre, questa situazione può anche essere gestita molto bene con una tabella di database.

Prima utilizzare un array per memorizzare voi i valori e le descrizioni:

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

Poi scorrere l'intero array di generare il vostro menu a discesa:

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

Sono andato con il codice hardware, posso facilmente modificare le opzioni in un secondo momento anche senza l'array. Ha senso. Grazie per l'aiuto! –

0

Qualcosa di simile:

<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> 

gettare in un'istruzione if là di separare in modo che una volta (x/10 * 15)> 60 inizia riporto in ore invece di avere 75/90/105/120 minuti.

2

Sono necessari due valori, l'incremento di 10 unità e il valore visualizzato dall'utente. Eseguire un ciclo for sopra $i (o qualche altra variabile) da 1 a 40 e calcolare i valori all'interno del ciclo:

  • 10-incremento è facile, basta moltiplicare $i per dieci.
  • Per il valore visualizzato, moltiplicare per 15 per ottenere il totale dei minuti. Poi trasformalo in ore e minuti usando il modulo operator (che ti dà i minuti) e la divisione standard (per ottenere le ore).
1

Questo dovrebbe farlo. Modificare il numero iniziale di $ i in quanti minuti totali deve contenere il menu a discesa. Ora è impostato su 750 minuti.

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>'; 

NOTA: Questo codice non è perfetto, il numero di partenza deve essere equamente diviso con 15 per generare il risultato desiderato, (tuttavia, funziona).

+0

usa 'floor()' not 'round()' –