处理查询字符串变量的更优雅方法


More elegant way of dealing with query string variables

我正在构建的网站是一个配置器,可让您选择某些项目的颜色。它将具有共享颜色配置的功能。它将要做的是生成一个带有查询字符串的 URL,例如 ?plate=red&cup=blue&napkin=white 我的代码读取查询字符串并更改<img> src值。例如。。。

<?php
//This stuff is just grabbing the query string values...
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$querystring = parse_url($url);
parse_str($querystring['query'], $color);
$availableColors = array("red","blue","white");
?>

这是我的 HTML,我使用 PHP 输入查询字符串颜色值。此代码还会检查以确保颜色位于可用颜色的数组中。

<div data-color="<?php if( in_array($color['plate'],$availableColors) ) {echo $color['plate'];} ?>">
    <img src="img/tablesetting/<?php if( in_array($color['dinnerPlate'],$availableColors) ) {echo $color['plate']."_plate.png";} else {echo "dummy.gif";} ?>">
</div>
<div data-color="<?php if( in_array($color['napkin'],$availableColors) ) {echo $color['napkin'];} ?>">
    <img src="img/tablesetting/<?php if( in_array($color['napkin'],$availableColors) ) {echo $color['napkin']."_napkin.png";} else {echo "dummy.gif";} ?>">
</div>
<div data-color="<?php if( in_array($color['cup'],$availableColors) ) {echo $color['cup'];} ?>">
    <img src="img/tablesetting/<?php if( in_array($color['cup'],$availableColors) ) {echo $color['cup']."_cup.png";} else {echo "dummy.gif";} ?>">
</div>

我想做的是避免每次我想检查颜色值是否在我的数组availableColors中使用条件语句。我想我正在寻找一种更简洁/优雅的方式。

function getColorData($color, $type) {
    $result = array('color_name' => '', 'color_img' = 'dummy.gif');
    $available_colors = array('red', 'blue', 'green');
    if (in_array($color, $available_colors))
        $result = array('color_name' => $color, 'color_img' = $color . '_' . $type . '.png');
    return $result
}

使用示例:

$plate_color_data = getColorData($color['plate'], 'plate');
echo '<pre>',print_r($plate_color_data),'/<pre>';    // just for test)

<div data-color="<?=$plate_color_data['color_name']?>">
    <img src="img/tablesetting/<?=$plate_color_data['color_img']?>">
</div>

首先,你使用parse_url有什么原因吗?不能只通过 _GET 美元或 _REQUEST 美元来获取变量吗?

其次,如果要验证数据in_array是一个很好的方法。 清理事情的简单方法是简单地将其全部移动到您的 php 区域,然后简单地将经过验证的数据输出到 html。

如果我正在构建它,我会从数据库中运行所有这些东西,这样您就可以查询数据库是否颜色有效。

我还会考虑通过 imagick 或 gd 生成图形服务器端。