You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:57:16