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 で 1 つの要素を持つ配列を本当に使用したい場合を除きます)。通常、その表記法は、複数のオプションが許可されているチェックボックスにのみ使用します。

注:<?="print this" ?>すべてのマシンでデフォルトでサポートされているわけではないため、短い echo ステートメント ( ) を使用することはお勧めしません。さらに、読みやすさはほとんど改善されません (これは個人的なことですが)。

于 2012-10-04T12:49:09.550 に答える
-1

複数行に分割して、PHP の代替構文を使用するのはどうですか? お気に入り:

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