2013-04-11 10 views
6

कृपया कोई मुझे इस डुप्लिकेट जांच फ़ंक्शन के साथ मदद कर सकता है। जब PHP की बात आती है तो मैं अभी भी काफी ताजा हूं, इसलिए कृपया मुझे क्षमा करें, अगर यह एक साधारण फिक्स है।स्थानीय टेक्स्ट फ़ाइल में डुप्लिकेट की तलाश

मैं list.txt नामक फ़ाइल में ईमेल पते की एक सूची संग्रहीत कर रहा हूं।

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

अब मैं एक समारोह (काम नहीं कर रहा) है, तो ईमेल सूची में पहले से ही है की जाँच करनी चाहिए कि:

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

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

जब यहाँ (एक नई लाइन पर प्रत्येक) फ़ाइल की सामग्री है मैं इस परीक्षण में एक मौजूदा ईमेल पते के साथ फ़ंक्शन को कॉल करता हूं, यह अभी भी सत्य लौटाता है:

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

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

मैं किसी के इनपुट की सराहना करता हूं।

उत्तर

7

यह list उपयोग करने के लिए ठीक है, लेकिन आप itemtrim() चाहिए जब list के माध्यम से पुनरावृत्ति के रूप में वे अभी भी LINEBREAK है:

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

अद्यतन:Nick जैसा कि बताया जा FILE_IGNORE_NEW_LINES की वैकल्पिक ध्वज नाटकीय रूप से होगा निष्पादन गति और कोड पर कटौती:

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

की प्रत्येक पंक्ति यह बात तय हो गई के अंत में गाड़ी वापसी और लाइन फ़ीड के लिए बाहर देखने के लिए चाहते हैं। लाइन ब्रेक के बारे में भूल गए। आपकी सहायता के लिए बहुत - बहुत धन्यवाद। – Saladon

+2

जब आप फ़ाइल फ़ंक्शन का उपयोग करते हैं तो 'FILE_IGNORE_NEW_LINES' ध्वज का उपयोग करना – Nick

+0

@Nick के बाद इसे मैन्युअल रूप से ट्रिम करने से बेहतर समाधान होगा - यह एक अच्छा बिंदु है, मैंने उदाहरण जोड़ा है और आपको एक लिंक में फेंक दिया है, उम्मीद है कि ठीक है। –

0

आप क्या कर सकते हैं फ़ाइल-फ्यूजिंग को पढ़ा जाता है- और प्रत्येक पंक्ति को अलग से पढ़ें। फिर आप बस जांच लें कि नाम पहले से ही है या नहीं। आप इसे भी खोल सकते हैं, पूरी फ़ाइल को सरणी (प्रत्येक पंक्ति = सरणी पंक्ति) में डाल सकते हैं और युगल को फ़िल्टर करने के लिए array_unique पर फेंक सकते हैं।

0

आप टी पढ़ सकते हैं वह रेखा से लाइन फ़ाइल करता है और उस लाइन की सामग्री को अपने नए ईमेल से तुलना करता है।

कुछ इस तरह:

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

आशा इस मदद करता है।

0
सूची के लिए

सभी गैर-डुप्लिकेट ईमेल:

$list=array_unique(file('list.txt')); 
जांच करने के लिए

अगर डुप्लिकेट मौजूद है:

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

या तो trim के लिए अपना ईमेल याद है, या एक बेहतर समाधान FILE_IGNORE_NEW_LINES जबकि उपयोग करने के लिए किया जाएगा आप file function का उपयोग करते हैं, जो आपको PHP की इनबिल्ट सरणी खोज (तेज़ होना चाहिए) का उपयोग करने की अनुमति देगा। उदाहरण के लिए:

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

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

आप फ़ाइल

$fp = fopen('emails.txt', 'r'); 
while (!feof($fp)) 
{ 
    $eml = fgets($fp); 
    if(trim($eml, " \n\r") == $email) 
    { 
     return false; 
    } 
} 
return true; 
संबंधित मुद्दे