在mySQL中,我有一列near_to
,我在其中保存类似Public Transportation,Business center
的条目
在前端,我想显示一些基于这些条目的图标。例如,当字段内有Public Transportation
、Business Center
或Fitness 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);
更新如果你想为多个模式匹配主题,那么模式键必须不同。上面示例中的模式数组中的键与整个字符串匹配,因此,正如您在评论中所说,只会返回一个图标。
如果我们按以下方式更改模式,您将在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>