请有人帮我解决这个重复检查功能。在PHP方面我还是很新鲜,所以请原谅,如果这是一个简单的解决方法。
我正在将一个电子邮件地址列表存储到名为list.txt的文件中。以下是文件的内容(每个都在新行上):
bob@foo.com
sam@bar.com
tracy@foobar.com
现在我有一个功能(不工作)应检查列表中是否已有电子邮件:
function is_unique($email) {
$list = file('list.txt');
foreach($list as $item){
if($email == $item){
return false;
die();
}
}
return true;
}
当我在此测试中使用现有电子邮件地址调用该函数时,它仍然返回true:
if( is_unique('bob@foo.com') ) {
echo "Email is unique";
} else {
echo "Duplicate email";
}
// Returns true even though bob@foo.com is in the list
我感谢任何人的意见。
答案 0 :(得分:7)
可以使用list
,但在迭代trim()
时,您必须item
list
,因为他们仍然拥有换行符:
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;
}
答案 1 :(得分:2)
要么记得trim您的电子邮件,要么在使用file function时使用FILE_IGNORE_NEW_LINES
更好的解决方案,这将允许您使用PHP的内置数组搜索(应该更快)。例如:
function is_unique($email) {
$list = file('list.txt',FILE_IGNORE_NEW_LINES);
return !in_array($email,$list);
}
答案 2 :(得分:0)
你可以做的是读取文件 - 使用fopen-并分别读取每一行。然后你只需检查名称是否已经存在。你也可以打开它,把整个文件放在一个数组中(每一行=数组行)并抛出一个array_unique来过滤掉双打。
答案 3 :(得分: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);
}
希望这有帮助。
答案 4 :(得分:0)
列出所有不重复的电子邮件:
$list=array_unique(file('list.txt'));
检查是否存在重复项:
$list1=file('list.txt');
$list2=array_unique(file('list.txt'));
count($list1)==count($list2);
答案 5 :(得分:0)
您希望在每行文件末尾注意回车和换行
$fp = fopen('emails.txt', 'r');
while (!feof($fp))
{
$eml = fgets($fp);
if(trim($eml, " \n\r") == $email)
{
return false;
}
}
return true;