2013-04-11 18 views
6

numaralı telefonu arayarak lütfen bu çift kontrol işleviyle bana yardımcı olabilir. PHP'ye gelince hala oldukça yeniyim, bu yüzden lütfen bu basit bir düzeltme ise, lütfen kusura bakmayın.Yerel metin dosyasına

Ben list.txt adlı bir dosyaya e-posta adreslerinin bir listesini depolamak ediyorum.

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

Şimdi bir fonksiyonu (çalışmıyor) sahip e-posta listesinde zaten olup olmadığını kontrol etmelidir:

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

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

İşte dosyanın içeriği (yeni bir satırda her) olduğunu Bu sınama işlevini varolan bir e-posta adresiyle çağırıyorum, yine de doğru olarak döndürür:

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

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

Kimsenin girişini takdir ediyorum. fopen- kullanma olayı dosyayı okumak ve ayrı ayrı her satırı okunur Ne yapabilirsiniz

cevap

7

O list kullanmak iyi ama list yineleme zaman onlar hala linebreak var gibi itemtrim() gerekir:

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

Güncelleme: bahsedildiğiNick gibi, FILE_IGNORE_NEW_LINES isteğe bağlı bayrak dramatik olur Yürütme hızı ve kodunu azaltın:

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

her satırın sonunda satır başı ve satır besleme için dışarı bakmak istiyorum. Satır sonlarını unuttum. Yardımın için çok teşekkürler. Eğer dosya fonksiyonu manuel olarak – Saladon

+2

- Bu harika bir nokta, ben örnek ekledi ve bunu bir bağlantı attı ettik ediyor, Umarım bu iyidir. – Nick

+0

@ Nick sonra dışarı Döşeme zorunda daha iyi bir çözüm olacaktır kullandığınızda 'FILE_IGNORE_NEW_LINES' bayrağını kullanma –

0

. Sonra ismin zaten orada olup olmadığını kontrol edersin. Ayrıca açabilir, tüm dosyayı bir diziye ekleyebilir (her satır = dizi satırı) ve çiftleri filtrelemek için bir array_unique üzerine atlayabilirsiniz.

0

o satır satır dosya ve bu hattın içeriğini yeni e-posta ile karşılaştırın. Böyle

şey: Bu yardımcı olur

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

Umut.

listesi için
0

olmayan tüm yinelenen e-postalar: kontrol için

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

çiftleri varsa:

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

Ya trim için e-posta hatırlamak veya daha iyi bir çözüm FILE_IGNORE_NEW_LINES süre kullanmak olacaktır PHP'nin dahili dizi aramasını kullanmanıza izin veren file function'u kullanırsınız (daha hızlı olmalı). Örneğin:

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

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

Bu düzelttim dosyası

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