使用 PHP 编写 if 语句的更好方法是什么?


What is a better way to write an if statement using PHP

我有一个选项下拉列表,如果值等于搜索变量,我需要回显selected

现在我正在使用 PHP if 语句来决定这一点,但我想通过使用在我的代码中不占用太多行的方法稍微清理一下它。

这是我的 php if 语句的示例:

<option value="antiques" <?php if($_POST['category'] == 'antiques'){echo 'selected';}?>>Antiques</option>

虽然这有效,但它只是在我的代码中占用了相当多的空间,因为我有近 100 个这样的选择选项。

有没有更好的方法来检查 post 变量是否等于此选项的值,然后回显selected

一个简单的方法是使用 PHP 三元运算符(更多信息可在此处获得:http://php.net/manual/en/language.operators.comparison.php [在关于浮点数的大警告下方向下滚动])

<option value="antiques"<?php echo ($_POST['category'] == 'antiques')?' selected':'';}?>>Antiques</option>

在这种情况下,它不会节省太多空间,但在我看来,这是一种与 HTML 内联编写它的更干净的方式。

使用@crazymoin中的代码进行编辑

将其移动到函数中的想法也很棒,可以使其变得容易。

我会像这样修改函数:

function abc($post,$value,$label){
    echo '<option value="'.$value.'"'.($_POST[$post] == $value)?' selected':''.'>'.$label.'</option>';
}

然后你可以这样调用它:

<?php abc('category','antiques','Antiques'); ?>

请注意,如果由于某种原因 $_POST 数组中的指定索引不存在,PHP 将抛出一些关于未定义索引的警告。您可能还想扩展函数以使用 isset() 等进行一些检查。

创建一个函数并根据需要多次使用它:

function abc($postData, $thisData) { if($postData == $thisData) { echo ' selected';} }

现在这样做:

<option value="antiques" <?php abc($_POST['category'], 'antiques'); ?> >Antiques</option>

希望对您有所帮助!


使用贾斯汀·特纳回应进行更改:

功能是:

function abc($postData, $thisData) {
    echo '<option value="'.$thisData.'">'.($_POST['category'] == 'antiques')?' selected':''.$thisData.'</option>';
}

现在只需多次使用该功能即可:

<?php abc($_POST['category'], 'antiques'); ?>

我喜欢在代码的一个区域进行所有逻辑处理。

执行此操作的一个干净方法是创建一个包含所有类别的数组。然后填写与所选类别匹配的类别。在每个菜单选项中,打印出与选项名称匹配的数组键的内容。

<?php
$selected=array(
                   'antiques'=>'',
                   'horses'=>'',
                   'umbrellas'=>''
                    );
$selected[$_POST['category']]='selected';
?>
<option value="antiques" <?php echo $selected['antiques'];?>>Antiques</option>