PHP isset用于三元运算符中的GET变量


PHP isset for GET variable in ternary operator

我有一个<select>字段,我希望根据GET值选择适当的<option>因此,我使用了一个三元语句来输出selected属性,如:

<select name="data" id="data">
    <option value="1" <?php echo $_GET['data'] == '1' ? 'selected' : '' ; ?>>One</option>
    <option value="2" <?php echo $_GET['data'] == '2' ? 'selected' : '' ; ?>>Two</option>
    <option value="3" <?php echo $_GET['data'] == '3' ? 'selected' : '' ; ?>>Three</option>
</select>

问题是,当页面第一次加载时,没有$_GET数组,所以我在选择框中得到一个php错误:

注意:未定义的索引:中的数据

因此,我尝试使用isset首先检查数组是否已设置,然后再检查值是否匹配:

    <option value="1" <?php echo isset($_GET) && $_GET['data'] == '1' ? 'selected' : '' ; ?>>One</option>

这将返回相同的错误。

简洁地处理这个错误并实现我所追求的目标的最佳方法是什么?

试试这个,

<option value="1" <?php echo isset($_GET['data']) ? ($_GET['data'] == '1' ? 'selected' : '') : ''; ?>>One</option>

您可以使用for循环,并且只有当您的需求为真时才打印出$selected变量。这将避免你重复自己。

<select name="data" id="data">
    <?php for ($i = 1; $i <= 3; $i++) { ?>
        <?php $selected = (isset($_GET['data']) && $_GET['data'] === $i) ? 'selected' : ''; ?>
        <option value="<?=$i?>" <?=$selected?>><?=$i?></option>
    <?php } ?>
</select>

注意:我使用的是PHP 5.4,所以可以合法地使用PHP short echo,在我看来,它在视图/模板中要好得多

如果你想显示数字的文本,而不想手动使用数组,你可以查看Pear的numbers_Words包。

像一样尝试

<option value="1" <?php echo ( isset($_GET['data']) && $_GET['data'] == '1') ? 'selected' : '' ;?> >One</option>