2014-09-04 45 views
-1

所以我有這個簡單的功能,因爲我懶得寫出一個狀態下拉每次我需要一個。我已經有一個數組,其中包含所有設置的狀態,縮寫爲鍵和名稱作爲值。它工作得很好,但我喜歡寫簡潔,清晰,易讀的代碼,而且我仍然非常不習慣,所以我發現我錯過了很多愚蠢簡單的s ***(我自己付出的代價,而不是經常練習足夠)。書寫更清晰的代碼

我在兩個主要條件中看到冗餘代碼的四行,我將它們移到if語句之外,除了我有最後一個echo語句,這真的是條件的最終目的,我不認爲重新測試$style變量是所有這些猶太教。

有沒有一個簡單的做法,我只是想如何使這個更清潔?

function create_state($style, $form = NULL) { 
    global $state; 
    echo '<select name="state">'."\n"; 
    echo '<option value="">--</option>'."\n"; 
    if ($style === 'abbr') { 
    ksort($state);  
    foreach ($state as $abbr => $name) { 
     echo "<option value=\"$abbr\""; 
     if($form === $abbr) 
     echo 'selected="selected"'; 
     echo ">$abbr</option>\n"; 
    } 
    } else { 
    asort($state);  
    foreach ($state as $abbr => $name) { 
     echo "<option value=\"$abbr\""; 
     if($form === $abbr) 
     echo 'selected="selected"'; 
     echo ">$name</option>\n"; 
    } 
    } 
    echo '</select>'."\n"; 
} 
+3

如果一切正常,你可能會尋找http://codereview.stackexchange.com/ – 13ruce1337 2014-09-04 02:13:01

+2

本應在代碼審查發佈,不在這裏 – 2014-09-04 02:13:09

+0

無論如何都有兩個快速提示:global - 在函數參數中解析它,在函數中回顯bad,連接輸出並將其作爲函數輸出返回 – 2014-09-04 02:14:43

回答

1

您可以使用引用變量:

if ($style == 'abbr') { 
    ksort($state); 
    $print = &$abbr; // print abbreviation 
} else { 
    asort($state); 
    $print = &$name; // print full name 
} 
foreach ($state as $abbr => $name) { 
    echo "<option value=\"$abbr\""; 
    if($form === $abbr) 
    echo 'selected="selected"'; 
    echo ">$print</option>\n"; 
} 
1
function create_state($style, $form = NULL) { 
    global $state; 

    var $output = ''; 

    $output .= '<select name="state">'; 
    $output .= '<option value="">--</option>'; 

    ($style === 'abbr') ? ksort($state) : asort($state); 

    foreach ($state as $abbr => $name) { 

     $selected = ($form === $abbr) ? 'selected="selected"' : ''; 
     $toShow = ($form === $abbr) ? $abbr : $name; 
     $output .= '<option '.$selected.' value="'.$abbr.'">'.$toShow.'</option>'; 
    } 

    $output .= '</select>'; 

    echo $output; 
}