如何在PHP中实现按关键字过滤数组(附JS实现参考)
PHP实现按关键字过滤带语言后缀的数组
需求说明
我已经用JavaScript实现了按关键字过滤数组的功能,但PHP实现逻辑不同。现在需要编写PHP函数filter_array_by_key,接收请求数组和关键字两个参数,返回以关键字为键、语言为子键的结构化数组。请求数组的键带有语言后缀(如question_ru)。
请求数组示例
$request = [ 'question_ru' => 'question ru', 'answer_ru' => 'answer ru', 'question_uz' => 'question uz', 'answer_uz' => 'answer uz', 'question_en' => 'question en', 'answer_en' => 'answer en', ];
期望输出
调用filter_array_by_key($request, 'question')返回:
$result = [ 'question' => [ 'ru' => 'question ru', 'uz' => 'question uz', 'en' => 'question en', ], ];
已实现的JavaScript代码
export function filterFormDataByKey(object: Object, key: string) { let startNumber = key.length + 1 const data = lodash.entries(object) let filteredObject = {} data.forEach((arr) => { if (arr[0].startsWith(key)) { let innerObj = { [arr[0].slice(startNumber)]: arr[1] } Object.assign(filteredObject, innerObj) } }) return filteredObject }
PHP实现方案
function filter_array_by_key(array $request, string $keyword): array { $result = [$keyword => []]; $prefix = $keyword . '_'; $prefixLength = strlen($prefix); foreach ($request as $key => $value) { if (str_starts_with($key, $prefix)) { $lang = substr($key, $prefixLength); $result[$keyword][$lang] = $value; } } return $result; }
代码说明
- 初始化结果数组,以传入的关键字作为顶级键,对应值为空数组
- 构建带下划线的前缀字符串,确保匹配完整的关键字前缀,避免类似
questionnaire_ru这类误匹配 - 遍历请求数组,用
str_starts_with检查键是否符合前缀规则 - 通过
substr提取下划线后的语言后缀,将对应值存入结果数组的语言子键下 - 最终返回结构化后的数组
内容的提问来源于stack exchange,提问作者Doston Avazov
相关产品推荐
相关产品推荐

