一維或二維數(shù)組 根據(jù)關(guān)鍵字 對(duì) 數(shù)組字段 進(jìn)行相似度排序

1、思想實(shí)現(xiàn)

  • 其中主要運(yùn)用PHP的方法 similar_text($field,$keyword,$percent),其中$field是對(duì)應(yīng)的值,$keyword是對(duì)比的值,$percent是相似度值(0~1)
  • 一維二維數(shù)組對(duì)比完之后根據(jù)相似度的值進(jìn)行排序,然后去除該字段返回。

2、代碼實(shí)現(xiàn)

/**
 * 一維/二維數(shù)組根據(jù)關(guān)鍵字對(duì)數(shù)組字段進(jìn)行相似度排序
 * @param array $array 原數(shù)組
 * @param string $keyword 關(guān)鍵字
 * @param string $field 要匹配的數(shù)組字段名,不傳則表示一維數(shù)組
 * @param int $limit 限制次數(shù),-1不限制
 * @return  array    排序好的數(shù)組
 */
function similarArrSort(array $array, string $keyword, $field = '', $limit = -1)
{
    //數(shù)組key小于2,直接返回,不符合排序要求(特例,可不寫)
    if (count($array) <= 1 || ($limit != -1 && $limit <= 1)) {
        return $array;
    }

    $newField = $field; //賦值

    //如果傳入的field為空則表示一維數(shù)組,生成field為label的二維數(shù)組
    if ($field == '') {
        $label2 = [];
        foreach ($array as $k => $value) $label2[$k]['label'] = $value;
        $array = $label2;
        $newField = 'label';
    }

    //數(shù)組相似度處理
    foreach ($array as $key => $value) {
        similar_text($value[$newField], $keyword, $percent);

        $value['percent'] = $percent;
        $data[] = $value;

    }

    //取出數(shù)組中percent的一列,返回一維數(shù)組
    $percent = array_column($data, 'percent');

    //排序,根據(jù) percent 排序
    array_multisort($percent, SORT_DESC, $data);

    //一維數(shù)組處理返回一維數(shù)組
    if ($field == '') {
        $newData = [];
        foreach ($data as $k => $v) $newData[$k] = $v[$newField];
        $data = $newData;
    }

    //限制返回?cái)?shù)量
    if ($limit != -1) {
        $data = array_slice($data, 0, $limit);
    }

    return $data;
}

3、測試代碼

3.1、一維數(shù)組
public function test()
{
    $arr = [2,3,15,23,44,25,66,231,566,246,255,656];
    $arr1 = similarArrSort($arr,55);
    ddd($arr1);
}
  • 返回的效果圖如下,關(guān)鍵詞是55。


3.2、二維數(shù)組
public function test()
{
    $arr = [
        ['a'=>'你好'],
        ['a'=>'你在干嘛'],
        ['a'=>'你好嗎'],
        ['a'=>'你好好'],
        ['a'=>'你在嗎'],
        ['a'=>'你你你'],
    ];
    $arr1 = similarArrSort($arr,'你好','a');
    ddd($arr1);
}
  • 返回的效果圖如下,關(guān)鍵詞是你好,對(duì)應(yīng)比較字段是a。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容