2013-04-11 37 views
6

proszę, może ktoś mi pomoże z tą funkcją sprawdzania duplikatów. Nadal jestem całkiem świeży, jeśli chodzi o PHP, więc przepraszam, jeśli to prosta naprawa.Poszukuje duplikatu w lokalnym pliku tekstowym

Przechowuję listę adresów e-mail do pliku o nazwie list.txt. Oto zawartość pliku (każde w nowej linii):

[email protected] 
[email protected] 
[email protected] 

Teraz mam funkcja (nie pracuje), które powinny sprawdzić, czy e-mail jest już na liście:

function is_unique($email) { 
    $list = file('list.txt'); 

    foreach($list as $item){ 
     if($email == $item){ 
      return false; 
      die(); 
     } 
    } 
    return true; 
} 

Kiedy I wywołania funkcji w tym teście z istniejącego adresu e-mail, to nadal zwraca true:

if(is_unique('[email protected]')) { 
    echo "Email is unique"; 
} else { 
    echo "Duplicate email"; 
} 

// Returns true even though [email protected] is in the list 

doceniam czyjąś wejście.

Odpowiedz

7

Jest dobrze, aby korzystać list ale trzeba trim() się item podczas iteracji przez list jak oni nadal mają linebreak:

if($email == trim($item)) 

Aktualizacja: W Nick wspomniano, opcjonalnie Flaga FILE_IGNORE_NEW_LINES drastycznie obniżenie prędkości wykonania i kodu:

function is_unique($email) { 
    $list = file('list.txt',FILE_IGNORE_NEW_LINES); 
    return in_array($email,$list) ? false : true; 
} 
+0

to naprawić go. Zapomniałem o przerwach w linii. Dziękuję bardzo za Twoją pomoc. – Saladon

+2

Używanie flagi 'FILE_IGNORE_NEW_LINES' przy korzystaniu z funkcji pliku byłoby lepszym rozwiązaniem niż konieczność ręcznego jej przycinania po tym – Nick

+0

@Nick - To świetny argument, dodałem przykład i wrzuciłem link do ciebie, mam nadzieję, że wszystko w porządku. –

0

Co możesz zrobić, to przeczytać plik - używając fopen- i przeczytać każdą linię osobno. Następnie wystarczy sprawdzić, czy nazwisko już tam jest. Możesz go także otworzyć, umieścić cały plik w tablicy (każdy wiersz = wiersz tablicy) i rzucić przez array_unique, aby odfiltrować podwojenia.

0

Możesz przeczytać t umieszcza wiersz po linii i porównuje zawartość tej linii z nowym e-mailem.

coś takiego:

function is_unique($email) 
{ 
    $file = fopen("list.txt", "r") or exit("Unable to open file!"); 

    while(!feof($file)) 
    { 
     if($email == $file){ 
     return false; 
     die(); 
    } 
    fclose($file); 
} 

Nadzieja to pomaga.

0

na liście wszystkie non-duplikaty e-maili:

$list=array_unique(file('list.txt')); 

dla sprawdzenia czy duplikaty istnieje:

$list1=file('list.txt'); 
$list2=array_unique(file('list.txt')); 
count($list1)==count($list2); 
2

Albo pamiętać trim pocztę, czy lepszym rozwiązaniem byłoby wykorzystanie FILE_IGNORE_NEW_LINES chwilę używasz file function, który pozwoliłby ci na użycie wbudowanego w PHP przeszukiwania tablic (powinno być szybsze). Na przykład:

function is_unique($email) { 
    $list = file('list.txt',FILE_IGNORE_NEW_LINES); 

    return !in_array($email,$list); 
} 
0

Chcesz zwrócić uwagę powrotu karetki i nowego wiersza na końcu każdego wiersza pliku

$fp = fopen('emails.txt', 'r'); 
while (!feof($fp)) 
{ 
    $eml = fgets($fp); 
    if(trim($eml, " \n\r") == $email) 
    { 
     return false; 
    } 
} 
return true; 
Powiązane problemy