【问题标题】:String Comparison in php is not workingphp中的字符串比较不起作用
【发布时间】:2016-12-16 08:39:25
【问题描述】:

我正在尝试打开一个文件并将每一行与一个字符串进行比较以查看它们是否相同,但它不起作用,这是代码。

$toSearch="moizhusnain@hotmail.com";
$textData=array();
$fla=FALSE;
$file=fopen('text.txt','r') or die('Unable to open file.');
while(!feof($file))
{
  $textData[]=fgets($file);
}
fclose($file);
for($i=0;$i<count($textData);$i++)
{
  echo $textData[$i]."<br/>";
  if (strcmp($toSearch,$textData[$i])==0)
  {
      echo "Yes";
  }
}

【问题讨论】:

  • 我假设,每个$textData[$i] 的末尾都有一个换行符 (\n),所以它可能不匹配?为什么还要使用 strcmp?
  • 1. strcmp 区分大小写。 2.使用===比较运算符
  • Simple Way shell_exec("grep -h 'moizhusnain@hotmail.com' filename") 如果得到输出则存在,否则找不到匹配项
  • 不要将数据行逐行加载到数组中,而是直接在while 中进行比较。你正在做的是矫枉过正,你在浪费内存和 CPU。
  • @Saurabh shell_exec 默认情况下并不简单...尤其是如果您不被允许调用它(一些主机非常挑剔)

标签: php string


【解决方案1】:

试试这个

if (strcasecmp ($toSearch,$textData[$i])==0){ //case insensitive comparison
      echo "Yes";
}

文档:http://php.net/manual/en/function.strcasecmp.php

【讨论】:

  • 这假定问题是区分大小写的。如果不是呢?尾随换行符似乎不是更明显(对于随意检查来说不是“视觉”,而当您对自己说“为什么这两件事不一样”时,大写字母往往会突出)。仍然,三票赞成并计数。
  • 它仍然无法正常工作。当我只比较两个刺时它实际上有效,但不幸的是,在这种情况下,当我将字符串与数组元素进行比较时,它不起作用。
  • 在写答案之前尝试重现问题。此问题与区分大小写无关
【解决方案2】:

我的假设:-(你的文本文件看起来像这样)

moizhusnain@hotmail.com
dfgfdgmoizhusnain111@hotmail.com
moidgdfdffdgzhusnain@hotmail.com
moizdsfdsfdsdfhusnain@hotmail.com

根据上面的假设代码应该是:-

<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
$toSearch="moizhusnain@hotmail.com";
$textData = file('text.txt',FILE_IGNORE_NEW_LINES); // use file() function with ignoring new lines of your text file
foreach($textData as $textDat){ // use foreach() rather than for() loop
  if ($toSearch == $textDat){
    echo "Yes";
  }
}
?>

参考:-

http://php.net/manual/en/function.file.php

注意:- 如果这对您有用,那仅仅意味着您的文本文件的新行会限制您的代码正常工作,而实际上不需要 strcmp()

【讨论】:

  • 是的!它有效,但我想问一下&lt;pre/&gt; 做了什么,因为我只是网络编程的新手。
  • @MoizHusnain 检查此链接以了解您的问题:-stackoverflow.com/questions/4756842/…
  • @Daniel 问题出在\n
【解决方案3】:

虽然 jonju 制作了一个使用另一种方法解决问题的工作示例,但可以使用现有代码修复它,只需使用此 RegEx (stolen from here)

$string = trim(preg_replace('/\s\s+/', ' ', $string));

以下代码有效:

<?php
$toSearch="moizhusnain@hotmail.com";
$textData=array();
$fla=FALSE;
$file=fopen('text.txt','r') or die('Unable to open file.');
while(!feof($file))
{
  $textData[]=trim(preg_replace('/\s\s+/', ' ', fgets($file)));;
}
fclose($file);
for($i=0;$i<count($textData);$i++)
{

    if (strcmp($toSearch,$textData[$i])==0)
    {
        echo "Yes";
    }
}
?>

【讨论】:

  • @Anant 实际上这是我的第一个问题,我厌倦了标记两个答案,但是当我标记第二个答案时,您的答案自动取消标记,这不是我的意图。
  • @MoizHusnain 没关系。我明白。对不起,如果我的措辞伤害了你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2014-06-17
  • 2012-12-06
  • 2014-04-03
  • 2012-01-22
相关资源
最近更新 更多