2
<?
///////////////////////
///////////////////////
$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多种颜色。我知道它并不是真正的数据密集型,但很难阅读和管理。

4

3 回答 3

3

您可以像这样轻松循环它:

<?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,然后使用字符串内三元运算符显示正确的输出。

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

$_GET["filter"] == $color

strcasecmp($_GET["filter"], $color) === 0
于 2012-10-04T12:55:52.427 回答
0

做这样的事情;

<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 语句 ( <?="print this" ?>),因为默认情况下并非每台机器都支持它。此外,它几乎不会提高可读性(尽管这是个人的)

于 2012-10-04T12:49:09.550 回答
-1

打破多行并使用 PHP 的替代 sintax 怎么样?像:

<?php if(...): ?>
    <sometag></sometag>
<?php endif; ?>
于 2012-10-04T12:51:23.023 回答