栏目关键词通常存于数据库栏目表的keywords等字段,需先确认字段名和表名,再通过SQL查询并做trim、解码、分隔符统一等处理,最后用array_filter等函数清洗数据。

栏目关键词通常存于数据库字段,不是 PHP 内置功能
PHP 本身没有 get_category_keywords() 这类函数。所谓“栏目关键词”,绝大多数 CMS(如 Dedecms、帝国、自研系统)都把它存在栏目表(比如 dede_arctype 或 category)的某个字段里,常见字段名是 keywords、seotitle、seodescription 或自定义的 cat_keywords。你得先确认自己用的系统里这个字段叫什么、存在哪张表。
查数据库时注意字段空值和字符串格式
直接查出来可能是空字符串、null、带空格的逗号分隔串(如 "php,后端,web开发"),也可能被 trim 过或没 trim。别一拿到就 explode(',', $str) —— 先做基础校验:
- 用
!empty($row['keywords'])判断非空,别只用isset() - 用
trim($row['keywords'])去首尾空格,再判断是否为空 - 如果字段含 HTML 实体(如
&),需用htmlspecialchars_decode($str, ENT_QUOTES)解码 - 多个关键词之间可能用中文顿号、空格、分号分隔,不一定是英文逗号;建议统一替换为英文逗号再
explode()
实际查询示例(PDO + MySQL)
假设栏目表叫 categories,关键词字段是 keywords,要查 ID=5 的栏目关键词列表:
$stmt = $pdo->prepare("SELECT keywords FROM categories WHERE id = ?");
$stmt->execute([5]);
$row = $stmt->fetch();
$keywords_str = $row ? trim($row['keywords']) : '';
$keyword_list = $keywords_str ? array_filter(array_map('trim', explode(',', $keywords_str))) : [];
// $keyword_list 现在是去空、去重后的关键词数组
注意:array_filter() 默认会过滤掉空字符串,但不会去重;如需去重,加 array_unique($keyword_list)。
立即学习“PHP免费学习笔记(深入)”;
缓存与性能:别每次请求都查库
栏目关键词一般变动极少,但如果你在模板里循环输出多个栏目的关键词(比如导航栏、侧边栏),每次查一次 DB 就是 N+1 查询问题。更稳妥的做法:
- 把所有栏目关键词一次性查出,用栏目 ID 做 key 存成关联数组,再用
serialize()或json_encode()缓存到 Redis / 文件 / APCu - 缓存 key 建议带版本号或更新时间戳,比如
cache:cat_keywords:v2,避免结构变更后缓存不刷新 - 后台修改栏目时,记得主动删除对应缓存项(不要依赖过期)
真正容易被忽略的是字段语义模糊——有些系统把 keywords 当 SEO 关键词用,有些却存的是后台标签、分类属性,甚至误填成描述文本。上线前务必人工抽检几条数据,看字段内容是否符合预期。











