所以我在这里有这个简单的功能,因为我懒得在每次需要时写出状态下拉列表。我已经有一个数组,其中所有状态都已设置,缩写为键,名称为值。它工作得很好,但我喜欢写简洁,干净,清晰的代码,而且我仍然非常没有经验,所以我发现我错过了许多愚蠢的简单的***(我为自己教学而不经常练习的代价足够)。
我在两个主要条件中看到了四行冗余代码,我将它们移到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";
}
答案 0 :(得分: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 :(得分: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;
}