我正在将一个基于片段的内容管理系统应用到我当前的项目中。片段可以通过完整 url 的完全匹配回落到部分 url 上的通配符匹配或最终默认片段与页面相关联。
为了实现这一点,我创建了一个带有通配符标志的页面关联表,系统首先根据非通配符关联检查当前 url,如果没有找到匹配项,它会检查通配符所在的部分 url标志已设置。
为了实现这一点,我从数据库中获取所有部分 url,并将它们放入一个数组中,然后遍历该数组以检查是否与当前 url 匹配:
protected function _check_wildcard($url = NULL)
{
if($url)
{
$q = $this->db->where('wildcard' ,'Y')
->from('content')
->get();
$wildcards = $q->result_array();
foreach($wildcards AS $wildcard)
{
if(strpos($url,$wildcard['url']) !== FALSE )
{
return $wildcard['snippet_id'];
}
}
}
else
{
return NULL;
}
}
任何人都可以建议一种更好的方法来做到这一点 - 最好是不需要每次加载页面时都必须不断下载所有通配符的完整列表的方法,因为我担心这会对系统的可扩展性?
最佳答案
您可以直接查询您的数据库,而不是加载所有通配符。假设 MySQL , 此查询检查给定 URL 字符串中的通配符 URL。例如:
// Keeping your current wildcard = 'Y' condition and adding the wildcard check.
$where = "wildcard = 'Y' AND INSTR('" . $url . "', url) > 0 ";
$this->db->where($where)->from('content')->get();
您可以检查您的数据库的文档,看它是否支持 INSTR 或类似的功能。
如果此查询未返回任何行,则可以返回 NULL
,如果有行,则可以返回第一个 snippet_id
。
希望这对您有所帮助!
关于php - 在 codeigniter 中反向通配符搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13268300/