我有一個搜索格式的關鍵字字符串:A,B + C,D + E,B + F,E + G + H。 ..
每個字母代表一個關鍵字,+表示我希望所有關鍵字出現。
關鍵字沒有保證的順序。
稍後我將搜索包含這些關鍵字的名稱的數據庫。
所以下面我的例子中,我將在包含名稱有趣:
A或(B和C)或(d和E)或(B和F)或(E和G和H),等等從一串關鍵字創建關鍵字列表的PHP算法
問題是我只能查詢包含單個關鍵字(它不是我的數據庫的API)的名稱的數據庫,因此我需要創建一個關鍵字列表來檢索名稱,然後檢查每個名稱以查看它是否存在包含所有相關關鍵字。
我需要一個算法來解析字符串並創建關鍵字列表,以最小化對數據庫的查詢。
舉例來說,在我的例子,我會得到名稱:
一個
B和檢查,如果它們也包含用C和F
E和檢查,如果它們也包含d或(G和H)
所以算法應該創建A,B,E的關鍵字列表來查詢,並且還要爲每個關鍵字添加它應該出現在關鍵字中的名稱。
我在PHP工作,所以我更喜歡在PHP中的答案,但僞代碼也會很好。 我希望它是明確的......
輸入是一個字符串,所以我需要首先創建數組A,以什麼方式?另外,我不僅需要獲取要查詢的關鍵字列表,還需要獲取它們應該出現的關鍵字。 –
輸入是「A,B + C,D + E,B + F,E + G + H」,不是嗎?爆炸它陣列是不可能的?該算法只給你查詢優先級**。當然,在每次查詢之後,您需要傳遞數組,並檢查是否有TRUE連接。並找出FALSE連詞。 – MeNa
你的算法優先考慮每一個單詞,但最後我只需要查詢其中的一些,例如我不需要查詢D或G,因爲它們只用E來檢查......無論如何,我認爲我我已經算出了它,我按照你的建議設定了一個優先數組,然後我再次迭代關鍵字並構建一個查詢數組,將具有最大優先級的關鍵字保留爲查詢關鍵字並將所有其他相關關鍵字分配給它們。不管怎麼說,還是要謝謝你。 –