有什么方法可以优化我的解决方案以获得更快更优雅的方法?

时间:2015-11-15 14:54:48

标签: php mysql

在mySQL中,我有一个列near_to,我在其中保存Public Transportation,Business center

等条目

在前端,我想根据这些条目显示一些图标。 例如,字段内有Public Transportation时的图标,或Business CenterFitness Center等等。

到目前为止,这是我的解决方案。我的问题是,有没有办法让这更快更优雅?

if (strpos($req['near_to'],'Pub') !==false) {
    echo '<li>public transportation icon</li>';
}
if (strpos($req['near_to'],'Fitn') !==false) {
    echo '<li>fitness icon</li>';
}
if (strpos($req['near_to'],'Busi') !==false) {
    echo '<li>business icon</li>';
}

1 个答案:

答案 0 :(得分:1)

我用preg_replace编写了一个小片段。这样,您可以在一个数组中定义映射,并通过在数组本身上运行preg_replace在一个语句中获取最终结果。

<?php 

$subject = "Public Transportation";
//$subject = "Business center";

$patterns = array(
    "/Pub.*/" => "<li>public transportation icon</li>",
    "/Fitn.*/" => "<li>fitness icon</li>",
    "/Busi.*/" => "<li>business icon</li>"
    );

$html = preg_replace(array_keys($patterns), array_values($patterns), $subject);

echo($html);

<强>更新 如果你想匹配多个模式的主题,那么模式键必须是不同的。上例中的patterns数组中的键与整个字符串匹配,因此只会在评论中返回一个图标。

如果我们更改下面的模式,您会在html结果中看到多个图标。我假设字符串是常量,它们用','分隔,其中','是可选的,因此'?'在模式中。

<?php 

$subject = "Public Transportation,Fitness Center,Business Center"; //$subject = "Business center";

$patterns = array(
    "/Public Transportation,?/" => "<li>public transportation icon</li>",
    "/Fitness Center,?/" => "<li>fitness icon</li>",
    "/Business Center,?/" => "<li>business icon</li>"
    );

$html = preg_replace(array_keys($patterns), array_values($patterns), $subject);

echo($html);

以上将返回

<li>public transportation icon</li><li>fitness icon</li><li>business icon</li>