本文介绍如何构建一个轻量级 php 搜索页面,支持用户输入字符(如“a”)和选择出生年份,精准筛选出姓名包含该字符且出生年份匹配的人员信息,并提供可运行、结构清晰、易于维护的代码实现。
要实现一个简洁可靠的姓名+年份联合搜索功能,关键在于解耦数据、逻辑与展示,避免 include 带来的变量作用域混乱和重复加载问题——这正是原代码中 function.php 的核心缺陷:include("data.php") 在函数内部执行时,$person 数组无法正确作用于函数作用域(尤其在严格模式或现代 PHP 版本下易失效),且 strpos(strtolower(...), $word) 未对搜索词做小写处理,导致大小写敏感不一致。
以下是推荐的重构方案,采用函数式设计 + 显式参数传递,确保可测试性与可维护性:
1. data.php(纯数据定义,不执行逻辑)
'Daniel', 'dateofbirth' => 2000],
['name' => 'Gaetan', 'dateofbirth' => 1980],
['name' => 'Anna', 'dateofbirth' => 2000],
['name' => 'Ben', 'dateofbirth' => 1995],
];2. functions.php(专注业务逻辑)
词(忽略大小写)且出生年份匹配 if (stripos($person['name'], $keywordLower) !== false && $person['dateofbirth'] === $year) { $results[] = $person; } } return $results; }
✅ 使用 stripos() 替代 strpos(strtolower()),更简洁安全;=== 严格比较避免类型隐式转换错误。
3. index.php(前端表单 + 结果展示)
Name Search Search by Name & Birth Year
No matches found for "= htmlspecialchars($_GET['q']) ?>" in year = htmlspecialchars($_GET['year'] ?? 'N/A') ?>.
此方案结构清晰、无副作用、符合 PSR-12 编码规范,是学习 PHP 表单处理与基础搜索逻辑的理想实践模板。