2014-03-24 61 views
1

如何單個字詞,如電視,電視,英寸英寸,手機,手機,移動,電話在和array_diff計數匹配相似的單詞PHP:和array_diff計數的問題,由於多個類似名稱

問題多的名字。因此,在創建和array_diff錯誤的百分比算

例子:

$str1 = "Samsung Television 21 Inches LED BH005DE"; 
    $str2 = "Samsung 21 Inch LED TV"; 

    $arr1 = explode(' ', $str1); 
    $arr2 = explode(' ', $str2); 

    $differenceCount = count(array_diff($arr2, $arr1)); 

在上面str1和str2中包含電視,電視寸,英寸 words..How可以解決這個問題

+0

預期結果是什麼?你究竟想達到什麼目的? –

+0

@AmalMurali匹配電視和電視字詞 – Me7888

+1

@Melody你在問不可能的事情,有很多帶有縮寫和簡短形式的單詞,系統應該如何識別它們?這不是你可以用一個或兩個函數解決的問題,用所有可能的場景(即不同格式的相同單詞)建立一個數據庫。 –

回答

2

最明顯的方法是使用同義詞爲:

$str1 = "Samsung Television 21 Inches LED BH005DE"; 
$str2 = "Samsung 21 Inch LED TV"; 

//synonyms: 
$syns = [ 
    'TV' => ['TV', 'Television'], 
    'Inch' => ['Inch', 'Inches'] 
]; 

//replace: 
$str1 = array_reduce(array_keys($syns), function($c, $x) use ($syns) 
{ 
    return $c = preg_replace('/\b'.join('\b|\b', $syns[$x]).'\b/', $x, $c); 
}, $str1); 
//now, str1 looks like "Samsung TV 21 Inch LED BH005DE" 

$str2 = array_reduce(array_keys($syns), function($c, $x) use ($syns) 
{ 
    return $c = preg_replace('/\b'.join('\b|\b', $syns[$x]).'\b/', $x, $c); 
}, $str2); 
//now, str2 looks like "Samsung 21 Inch LED TV" 

$arr1 = explode(' ', $str1); 
$arr2 = explode(' ', $str2); 


//var_dump(array_diff($arr1, $arr2));//['BH005DE'] 

在你的情況,你可以不依賴於某種形式的字(像Inch - Inches) - 因爲你需要解析縮寫 - 這些都是具有特定含義的情況。因此,使用同義詞可能是解決所有案件的唯一方法。

+0

上面的代碼工作在本地主機,但在服務器不工作.....什麼要啓用上面的代碼? ? ...................我在服務器上使用5.4.26 PHP版本,在本地主機上使用5.4.12 – Me7888

+0

你的錯誤是什麼? (地方'使用error_reporting(-1);'作爲腳本的第一行) –

+0

PHP的警告:array_reduce()預計參數2是一個有效的回調,沒有給出 – Me7888