2013-04-11 4 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; 
} 

私はそれがまだ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を使用するの罰金ですが、あなたは、彼らはまだ改行を持っているようlistを反復処理する際itemtrim()する必要があります。

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をスローして2倍を除外することもできます。

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; 
関連する問題