2017-09-15 111 views
0

我在想什麼是在PHP中使用通配符在csv中搜索匹配的最快方法?PHP/Shell - 使用通配符搜索CSV的最快方法

例如我有一個簡單的文本文件,看起來這樣(的%是通配符):

djfras,Hub3W,%k6q2,88%HA,zzgsqw2,L632 %%,...

功能/正則表達式/ grep的一切應該找到如火柴:

diFras或ok6q2或L632s5

,因爲這將發生幾個hundert次的速率 - 什麼是最強大的,時間和CPU省電方法,以及如何實現?

提前感謝名單

湯姆

編輯:對不起,我太不確切:),同時通過以.json文件有幾百行線循環出現這種情況 - 它本身被加載新鮮的以.json文件每一秒

+2

裝入CSV導入數據庫首先,添加適當的索引,然後使用SQL –

+1

幾百個搜索每秒基於文件系統的CSV文件的搜索數據庫,基本上是不可能的 –

+0

在正則表達式,只需更換'% '帶有適當的正則表達式通配符的通配符 - 點'.'。 – Asunez

回答

0

所以這是我修補 - 似乎工作 - 但在我的眼睛看起來可怕的愚蠢?

因爲我很新的正則表達式,東西 - 任何想法/響應/校正/改進非常歡迎的。

,它似乎比內置簡單的PHP慢約10-20倍in_array搜索沒有通配符。現在我測量了這個 - 慢30-50倍! puuuh

有沒有比我的菜鳥編碼更好/更清潔/更快的方式?

$haystack = explode(',', str_replace('%', '.', strtoupper('DEISD, B%W951%, CCA828'))); 

$needle = strtoupper('BAW951L'); 

foreach ($haystack as $pattern) { 
    preg_match('/^' . trim($pattern) . '$/', $needle) ? $match = 'true' : $match = 'false'; 
    // just for debug print what it does 
    print(preg_match('/' . trim($pattern) . '/', $needle) . PHP_EOL); 
    print($match . PHP_EOL); 
}