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

标签 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>';
}

最佳答案

我用 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>

关于php - 有什么方法可以优化我的解决方案以获得更快、更优雅的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721069/

相关文章:

php - 使用Open Graph协议(protocol)提取og :image source

php - 如何将<select>中的时间输入mysql并让它输出am/pm?

PHP MYSQL存储session数据,问题

php - 包含一个 SVG 文件并改变它的高度

php - 构建数据库驱动的用户系统时使用最少的 MySQL 查询

javascript - 使用 php/mysql/javascript 的导航菜单

python - 使用 dict 对 SQL 插入进行字符串格式化

php - MySQL 不会插入 JSON

php - laravel 中的分页功能,问题 : Call to a member function paginate() on array

php - password_hash 每次返回不同的值