2017-09-15 6 views
0

PHP에서 와일드 카드로 CSV로 일치하는 항목을 검색하는 가장 빠른 방법은 무엇입니까?PHP/쉘 - 와일드 카드로 일치하는 CSV를 찾는 가장 빠른 방법

예컨대

djfras, Hub3W %의 k6q2, 88 %, 하 zzgsqw2, L632 %%, ...

기능/:이 방법을 보이는 간단한 텍스트 파일을합니다 (% 와일드 카드입니다) 예를 들어 대한 일치 찾아야한다 어떤 정규식/그렙이 같은

diFras 또는 ok6q2 또는 L632s5

여러 hundert 시간을 두됩니까 - 가장 강력한, 시간 및 CPU 절약 방법과 방법을 구현하는 방법은 무엇인가? 사전에

고맙습니다

편집 : 나는 수백 라인과 .json 파일의 라인을 통해 반복하면서 일이 너무 부정확 : 미안 - 그 자체가 신선한로드 된 .json 파일 매초마다

+2

로드 먼저 데이터베이스로 CSV는 다음 초당 파일 시스템 기반의 csv 파일의 SQL을 –

+1

몇 백 개 검색을 사용하여 데이터베이스를 검색, 적절한 인덱스를 추가 기본적으로 정규식에서는 불가능한 –

+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); 
}