2012-06-25 22 views
5

Tengo una matriz de formulario estándar en PHP como este. Necesito dar cuenta de hasta 10 horas de trabajo en incrementos de 15 minutos con 10 como valor por cada 15 minutos o 40 por hora. ¿Es posible automatizar esto en algún tipo de matriz con PHP en lugar de codificar cada uno de estos valores? Parece que debería haber una mejor manera y no tengo idea de cómo empezar?matriz de selección dinámica en 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 menos que usted está viendo incrementos cambiando al tiempo (10 minutos, 5 minutos, etc.), que son conscientes de que hardcoding esto está muy bien, y más rápido el rerererecalculating esto con PHP todo el tiempo? Por supuesto, podría generar la lista una vez con algún código PHP, y dejar ese código como un comentario cerca de allí para que alguien lo agarre rápidamente para recrear la lista con variables ligeramente diferentes en un año más o menos, luego de lo cual permanece estático. – Wrikken

Respuesta

2

Probablemente más fácil de codificar la solución. Creo que esta es una de esas situaciones en las que está bien, como lo mencionó @Wrikken, ya que hace que el código sea muy limpio y fácil de mantener (imagina volver a esto en un año o dos). Además, esta situación también se puede manejar muy bien con una tabla de base de datos.

primer lugar el uso de una matriz para almacenar los valores y las descripciones que:

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

a continuación, recorrer toda la matriz para generar el menú desplegable:

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

Fui con el código duro, puedo cambiar las opciones fácilmente en una fecha posterior, incluso sin la matriz. Tiene sentido. ¡Gracias por la ayuda! –

0

Algo así como:

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

El tiro en una sentencia if allí para separarlo de modo que una vez (x/10 * 15)> 60 comienza llevar encima en horas en lugar de tener 75/90/105/120 minutos.

2

Se necesitan dos valores, el 10-unidades de incremento y el valor que se muestra usuario. Ejecutar un bucle for sobre $i (o alguna otra variable) del 1 al 40 y el cálculo de sus valores dentro del bucle:

  • 10-incremento es fácil, basta con multiplicar $i por diez.
  • Para el valor mostrado, multiplica por 15 para obtener la cantidad total de minutos. Luego, conviértalo en horas y minutos usando modulo operator (que le da los minutos) y divison estándar (para obtener las horas).
1

Esto debe hacerlo. Cambie el número de inicio de $ i a cuántos minutos totales debe contener el menú desplegable. Ahora está establecido en 750 minutos.

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: Este código no es perfecto, el número de inicio tiene que ser dividido a partes iguales con 15 para generar el resultado deseado, (sin embargo, funciona).

+0

use 'floor()' not 'round()' –