2012-06-25 28 views
5

Tôi có một mảng biểu mẫu chuẩn trong PHP như thế này. Tôi cần tính đến 10 giờ lao động với gia số 15 phút với 10 lần cho mỗi 15 phút hoặc 40 mỗi giờ. Có thể tự động hóa điều này vào một số loại mảng với PHP thay vì hardcoding mỗi giá trị này? Nó chỉ có vẻ như có nên có một cách tốt hơn và tôi không có ý tưởng làm thế nào để bắt đầu?Mảng chọn động trong 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

Trừ khi bạn thấy số gia tăng thay đổi theo thời gian (10 phút, 5 phút, v.v.), bạn biết rằng việc mã hóa phần mềm này là tốt, và nhanh hơn việc kiểm tra lại tính năng này với PHP mọi lúc? Tất nhiên, bạn có thể tạo danh sách một lần với một số mã PHP và để lại mã đó dưới dạng nhận xét gần đó để một người nào đó nhanh chóng lấy lại danh sách với các biến hơi khác nhau trong một năm hoặc lâu hơn, sau đó nó lại tĩnh. – Wrikken

Trả lời

2

Có lẽ dễ dàng nhất để mã hóa giải pháp. Tôi nghĩ rằng đây là một trong những tình huống mà nó là OK như @ Wrikken đã đề cập, vì nó làm cho mã rất sạch sẽ và dễ dàng để duy trì (Hãy tưởng tượng trở lại này trong một hoặc hai năm). Ngoài ra tình huống này cũng có thể được xử lý rất tốt với một bảng cơ sở dữ liệu.

sử dụng đầu tiên một mảng để lưu trữ các giá trị bạn và mô tả:

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

Sau đó, vòng lặp thông qua toàn bộ mảng để tạo danh sách thả xuống của bạn:

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

Tôi đã đi với mã cứng, tôi có thể dễ dàng thay đổi các tùy chọn vào một ngày sau đó ngay cả khi không có mảng. Có ý nghĩa. Cảm ơn đã giúp đỡ! –

0

Cái gì như:

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

Ném trong một tuyên bố nếu có để tách nó để một lần (x/10 * 15)> 60 nó bắt đầu mang trên vào giờ thay vì phải 75/90/105/120 phút.

2

Bạn cần hai giá trị, tăng 10 đơn vị và giá trị do người dùng hiển thị. Chạy một vòng lặp for qua $i (hoặc một số biến khác) 1-40 và tính toán giá trị của bạn bên trong vòng lặp:

  • 10-increment rất dễ dàng, chỉ cần nhân $i bởi mười.
  • Đối với giá trị được hiển thị, nhân với 15 để nhận tổng số phút. Sau đó chuyển đổi thành giờ và phút bằng cách sử dụng modulo operator (cung cấp cho bạn số phút) và divison chuẩn (để nhận giờ).
1

này nên làm điều đó. Thay đổi số bắt đầu của $ i thành tổng số phút mà trình đơn thả xuống sẽ chứa. Nó bây giờ thiết lập để 750 phút.

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

LƯU Ý: Mã này không hoàn hảo, số bắt đầu phải được chia đều cho 15 để tạo kết quả mong muốn, (tuy nhiên, nó hoạt động).

+0

sử dụng 'floor()' not 'round()' –