提供一维数组模糊查询,只支持utf-8 内部处理是Unicode 编码特殊编码格式的可能会出错

2019年9月30日14:36:15

知识兔
if (!function_exists('arrayFuzzyQuery')) {    /*     * 提供一维数组value 模糊查询,只支持utf-8 内部处理是Unicode 编码特殊编码格式的可能会出错     * 注意:此方法可能会出现处理时间过长的问题     */    function arrayFuzzyQuery($string, array $array = [], $key = null) {        if (empty($string)) {            throw new \Exception('查询参数不能为空');        }        if (empty($array)) {            throw new \Exception('被查询数组为空');        }        $return = [];        //期望相似度比例 100为 100%        $expectedRatio = 50;        //同时使用全对比和相似度对比        foreach ($array as $k => $v) {            if (empty($key)) {                similar_text($string, $v, $percent);                if (mb_substr_count($string, $v) > 0 || $percent >= $expectedRatio) {                    array_push($return, $v);                }            } else {                similar_text($string, $v[$key], $percent);                if (mb_substr_count($string, $v[$key]) > 0 || $percent >= $expectedRatio) {                    array_push($return, $v);                }            }        }        return $return;    }}
 

 注意: similar_text对英文支持效果好一点,中文对比效果差一点,根据实际业务需要 50%这个比例需要调整,经过几轮测试,效果还可以,基本够用,不嫌麻烦就添加到mysql数据库使用like OR elasticsearch 

计算机