PHP三元运算符


PHP ternary operator

我有两个三元运算符,如下所示:

1. (($_POST['movietype'] == $row1['id'])?'selected="selected"':'');
2. (($row1['id'] == $row['type'])?'selected="selected"':'');

以下是我的输出:

echo '<option value="'.$row1['id'].'"'.[HERE].'>'.$row1['label'].'</option>';

我的问题是如何将这两个三元运算符合并到[HERE]部分?

如果使用in_array(),同一事物只有两个条件,甚至可以组合在一个条件中。

所以类似于:

$class = ($_POST['movietype'] == $row1['id'] || $row1['id'] == $row['type'])
            ? 'class="selected"' : '';

或:

$class = in_array($row1['id'], array($_POST['movietype'], $row1['id']))
            ? 'class="selected"' : '';

和:

echo '<option value="'.$row1['id'].'" '.$class.'>'.$row1['label'].'</option>';

遵循相同的代码,您可以执行以下操作:

    $isSelected = ($_POST['movietype'] == $row1['id'] || $row1['id'] == $row['type']) 
                   ? 'selected="selected"' : '';

然后您可以将[HERE]部分替换为以下内容:

echo '<option value="'.$row1['id'].'" '.$isSelected.'>'.$row1['label'].'</option>';

顺便说一下,我建议你使用If...Else

我建议创建一个函数,您可以向该函数传递无限数量的值,该函数可以触发选择的选项

/**
* @param id
* @param matches...
**/
function selectOpt() {
    $args = func_get_args();
    $id = array_shift($args);
    foreach($args as $a) {
        if($a === $id) {
            return 'selected="selected"';
        }
    }
    return '';
}

然后你可以这样称呼它:

echo '<option value="'.$row1['id'].'"'. selectOpt($row1['id'], $_POST['movietype'], $row['type']) .'>'.$row1['label'].'</option>';