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

PHP如何实现多维数组指定字段的模糊匹配查找

PHP 数组模糊检索改造方案

问题现状

原有searchItem函数仅支持检索键值与输入内容完全相等的数组元素,当输入内容为目标字段值的片段时(例如目标值为banana: Bits received,输入Bits received),无法返回匹配结果,需要改造为支持关键词片段命中的模糊检索能力。

核心改造逻辑

将原函数中精确相等判断的逻辑,替换为子串包含检测即可实现基础模糊匹配。使用strpos/stripos做包含判断可兼容所有PHP版本,支持配置是否区分大小写。

可直接使用的实现代码

<?php
echo "<pre>";
$array = [
    [
        "id" => "33704",
        "name" => "Total apple"
    ],
    [
        "id" => "33706",
        "name" => "Used apple"
    ],
    [
        "id" => "33694",
        "name" => "banana: Bits received"
    ],
    [
        "id" => "33697",
        "name" => "banana: Bits sent"
    ]
];

/**
 * 数组模糊检索函数
 * @param array $array 待检索的数组
 * @param string $key 要匹配的键名
 * @param string $keyword 检索关键词(支持片段匹配)
 * @param bool $caseSensitive 是否区分大小写,默认不区分
 * @return array 匹配到的结果集合
 */
function fuzzySearchItem(array $array, string $key, string $keyword, bool $caseSensitive = false): array
{
    $results = [];
    // 空关键词直接返回空结果,避免无效遍历
    if (trim($keyword) === '') {
        return $results;
    }

    foreach ($array as $item) {
        if (is_array($item)) {
            // 检测当前节点是否存在待匹配的键
            if (isset($item[$key])) {
                $match = false;
                if ($caseSensitive) {
                    // 区分大小写的包含判断,兼容PHP5.4+全版本
                    $match = strpos($item[$key], $keyword) !== false;
                } else {
                    // 不区分大小写的包含判断,兼容PHP5.4+全版本
                    $match = stripos($item[$key], $keyword) !== false;
                }
                if ($match) {
                    $results[] = $item;
                }
            }
            // 递归检索子数组
            $results = array_merge($results, fuzzySearchItem($item, $key, $keyword, $caseSensitive));
        }
    }

    return $results;
}

// 测试:传入片段关键词检索
$result = fuzzySearchItem($array, 'name', 'Bits received');
print_r($result);

匹配效果说明

  • 传入完整值banana: Bits received可正常命中对应元素
  • 传入片段值Bits received、bits received(小写)、banana均可命中对应元素
  • 传入apple会同时命中Total apple和Used apple两条记录,符合模糊检索预期
  • 支持通过$caseSensitive参数切换是否开启大小写敏感匹配

可选增强能力

如果业务有更复杂的匹配需求,可替换匹配逻辑实现对应效果:

  • 多关键词匹配:将输入关键词按空格/指定分隔符拆分,要求字段值同时包含所有拆分后的关键词才判定为命中,适合多条件组合检索场景
  • 正则匹配:将包含判断逻辑替换为preg_match,支持前缀匹配、后缀匹配、格式校验等更灵活的自定义规则
  • 结果权重排序:按照关键词在字段值中的出现位置、匹配片段长度对结果排序,匹配度越高的结果排位越靠前,优化检索体验
  • 性能优化:如果待检索数组是固定维度(比如示例中为固定二维数组),可以移除递归逻辑直接遍历目标层级,减少不必要的函数调用开销,检索速度更快

内容的提问来源于stack exchange,提问作者Bien Albert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:57:11