【问题标题】:PHP - Can I make this if else into a cleaner snippet like an array and loop?PHP - 我可以把这个 if else 变成一个更干净的片段,比如数组和循环吗?
【发布时间】:2012-10-04 12:39:03
【问题描述】:
<?
///////////////////////
///////////////////////
$OriginalUrlToDisplay=strtok($_SERVER["REQUEST_URI"],'?');
$buttonTypeForColours="radio";
///////////////////////
///////////////////////
?>
<form>
<input type="<?=$buttonTypeForColours ?>" name="colourChoice[]" <? if($_GET["filter"]=="White"){?> onclick="location.href='<?=$OriginalUrlToDisplay?>'" checked="checked" <? } else {?> onclick="location.href='?filter=White'"<? } ?>/> <img src="http://www.gc-cdn.com/mobile/white.png" /> White<br />
<input type="<?=$buttonTypeForColours ?>" name="colourChoice[]" <? if($_GET["filter"]=="Black"){?> onclick="location.href='<?=$OriginalUrlToDisplay?>'" checked="checked" <? } else {?> onclick="location.href='?filter=Black'"<? } ?>/> <img src="http://www.gc-cdn.com/mobile/black.png" /> Black<br />
</form>

有没有更简洁的方法来写这个。有40多种颜色。我知道它不是真正的数据密集型,但很难阅读和管理。

【问题讨论】:

  • 你试过函数吗?
  • 同意^,只需使用一个简单的循环来生成HTML。

标签: php arrays loops if-statement


【解决方案1】:

你可以像这样轻松地循环它:

<?php

$colors = array("White", "Black", "Green", "...");
foreach ($colors as $color) {
    echo '<input type="', $buttonTypeForColours, '" name="colourChoice[]"',
         $_GET["filter"] == $color
             ? 'onclick="location.href=\'?\'" checked="checked"' 
             : 'onclick="location.href=\'?filter=' . $color . '\'"',
         ' /><img src="http://www.gc-cdn.com/mobile/', strtolower($color), '.png" /> ', $color, '<br />'
         ;
}

?>

它循环遍历$colors 中指定的所有可能颜色,然后使用字符串ternary operator. 显示正确的输出

您还可以通过更改轻松进行不区分大小写的比较

$_GET["filter"] == $color

strcasecmp($_GET["filter"], $color) === 0

【讨论】:

    【解决方案2】:

    就做这样的事;

    <form>
    <?php
    $colours = array('black', 'white', 'yellow', 'green', '...');
    foreach($colours as $colour):
        $url = $_GET['filter'] == $colour || $_GET['filter'] == ucfirst($colour) ? $OriginalUrlToDisplay : '?filter='. ucfirst($colour);
    ?>
        <input type="<?php echo $buttonTypeForColours; ?>" name="colourChoice[]" onclick="location.href='<?php echo $url; ?>'" checked="checked" /> <img src="http://www.gc-cdn.com/mobile/white.png" /> White<br />
    <?php 
    endforeach;
    ?>
    </form>
    

    顺便说一句;如果您使用单选按钮,请不要将 [] 附加到名称(除非您真的想在 php 中使用具有单个元素的数组)。通常,您只会将该表示法用于允许多个选项的复选框。

    注意:我不建议您使用简短的 echo 语句 (&lt;?="print this" ?&gt;),因为默认情况下并非每台机器都支持它。此外,它几乎不会提高可读性(尽管这是个人的)

    【讨论】:

    • 对于当前稳定的 PHP 5.4 和未来版本,它 (&lt;?=) 默认启用。
    【解决方案3】:

    拆分多行并使用 PHP 的替代 sintax 怎么样?喜欢:

    <?php if(...): ?>
        <sometag></sometag>
    <?php endif; ?>
    

    【讨论】:

    • 我什至不知道这是什么意思。 -1
    • php alternative sintax 被证明对我很有帮助,在编写更好看的视图时。我只是认为它也可以帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2020-04-24
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多