PHP:如何将存储值更改为用户友好的值



简而言之,问题,

Field:ProfileItems = "action,Search,Work,Flow,pictures";
Mysql query = "SELECT ProfileItems FROM addUsers";

然后我explode ,制作数组,例如:array('action','search',...etc)

并创建用于,的字段

结果:

<form>
action : <input type=text name=action>
search : <input type=text name=search>
...etc
<input type=submit>
</form>

我的问题是如何在不使用 IF 语句的情况下用更用户友好的名称(添加描述)替换数据库中的名称?

//created asoc array with Key = search item and value = user friendly value
$prase = array("ABS" => "ABS (Anti lock braking System)"
         ,"DriverAirBag" => "Air bags");
$string= "ABS,DriverAirbag,GOGO,abs";
foreach($prase as $db=>$eu){
    echo "if $db will be $eu<br>";
    echo str_ireplace($eu,$db,$string);
}
echo $string;

上面试过,但史诗般的失败:D !..你能帮帮我吗?

在 PHP 中有一个映射并不是一个不合理的方法,但你正在倒退str_ireplace():它search, replace, subject,所以在你的情况下str_ireplace($db, $eu, $string);

但是,无论如何,仅仅在逗号分隔的字符串列表中执行str_ireplace()并不理想。首先,想象一下,如果在替换ABS之后,您遇到了另一个与lock匹配的配置文件项(恰好出现在"防抱死制动系统"中)。哎呀。现在您已经覆盖了之前的替换!

像这样的事情怎么样:

$prase = array("ABS" => "ABS (Anti lock braking System)"
         ,"DriverAirBag" => "Air bags");
$string= "ABS,DriverAirbag,GOGO,abs";
$fields = explode(',', $string);
foreach($fields as $field) {
    $friendly = $field;
    if (isset($phrase[$field]))
        $friendly = $phrase[$field];
    echo htmlspecialchars($friendly) . ': <input type="text" name="' . htmlspecialchars($field) . '" />
}

这里的关键是你分别处理每个字段。而且您绝不只是在进行更换;您正在专门查找关键字"ABS"或"驾驶员安全气囊"。如果没有完全匹配,则该项目没有人性化的名称,并且进行任何替换都没有意义。

如果您能够更改数据库架构,所有这些都可以进一步改进。存储逗号分隔的列表是不可取的。您应该有一个包含类似架构的表:

  • field_id(例如,"获取和惠益分享")
  • 名称(例如,"防抱死制动系统")

还有一张桌子,比如:

  • user_id(我在这里从名称addUsers推断出一点 - 无论您现在在addUser中具有识别该人的任何字段)
  • field_id(即上field表的外键)

请注意,对于每个人,您最终可能会在此表中产生许多行(1, 'ABS'), (1, 'DriverAirbag')

但是,您的查询可能会变成

SELECT field, name
FROM user_field
INNER JOIN field USING (field_id)

现在,您可以为每个字段返回一行(不需要explode!),并且每行都包含计算机友好和人类友好的名称。

相关内容

  • 没有找到相关文章