【问题标题】:PHP - Comparing form value with values in an arrayPHP - 将表单值与数组中的值进行比较
【发布时间】:2013-05-16 15:41:23
【问题描述】:

我正在尝试编写一个代码,将文本文档中的值与表单中发布的值进行比较。

到目前为止,我已经得到了这个,但我绝对肯定我正在做一些事情。

提前感谢您的帮助!

<form method="POST" action="file.php"> 
<p>
<br /><input type="text" name="name" ><br />
</p>
<p><input type="submit" value="Check" /></p>
</form>

<?php
if (isset($_POST['name'])) {
    $name = $_POST['name'];

    /*The text document contains these written names: 
    Michael 
    Terry 
    John 
    Phillip*/ 

    $lines = file('names.txt'); 

    $names_array = ($lines);   

        if (in_array($name, $names_array)) {
            echo "exists";
        } else {
            echo 'none';
        }
}
?>

更新:已修复,现在工作正常!

【问题讨论】:

    标签: php text compare document


    【解决方案1】:

    问题在于您的file('names.txt') 函数。虽然这会返回一个数组,其中每一行都位于一个单独的键中,但它还在同一行中包含换行符。

    所以你的数组实际上包含:

    $lines[0] = "Michael\n";
    $lines[1] = "Terry\n";
    $lines[2] = "John\n";
    $lines[3] = "Phillip\n";
    

    为防止这种情况发生,请使用file('names.txt', FILE_IGNORE_NEW_LINES)

    $lines[0] = "Michael";
    $lines[1] = "Terry";
    $lines[2] = "John";
    $lines[3] = "Phillip";
    

    现在你的名字应该匹配了。

    除此之外,为什么还要使用以下内容?

    $lines = file('names.txt'); 
    $names_array = ($lines);
    
    //simply use the following.
    $names_array = file('names.txt', FILE_IGNORE_NEW_LINES); 
    

    【讨论】:

    • 是的,我刚刚意识到我正在为自己做更多的工作!修好了!谢谢!
    【解决方案2】:

    阅读有关file 的文档:http://www.php.net/manual/en/function.file.php

    注意:

    结果数组中的每一行都将包含行尾,除非使用 FILE_IGNORE_NEW_LINES,因此如果您不希望出现行尾,您仍然需要使用 rtrim()。

    【讨论】:

      【解决方案3】:



      /*The text document contains these written names: 
      Michael 
      Terry 
      John 
      Phillip*/ 
      
      $lines = file('data.txt'); //Lets say we got an array with these values   //$lines =array('Michael','John','Terry','Phillip');    $i=0;
      foreach($lines as $line)   {
      $lines[$i] =trim($line);
      $i++;   }    
      
          if (in_array($name, $lines)) {
              echo "exists";
          } else {
              echo 'none';
          } } ?
      

      块引用

      数据.txt

      迈克尔·特里·约翰·菲利普

      data.txt 有空格,所以我们使用 trim() 删除它。

      【讨论】:

      • 感谢您的帮助,现在一切都按照我需要的方式进行了!标记为答案!
      • 这只是一个糟糕的解决方案。首先,它不需要遍历所有行。然后为了解决它,您将修剪后的版本添加到数组的末尾,使其长度增加一倍。因此,您最终会在列表中获得所有名称双倍的名称,一次带有换行符,一次不带有换行符。而且你还添加了一个随机的 $i ,你无缘无故地增加了。
      • @HugoDelsing - 我对 PHP 真的很陌生,所以如果上面的答案充满了不必要的代码,感谢您指出!我尝试了添加“忽略新行”的建议,但它仍然对我不起作用。即输出无而不是存在。还有其他想法吗?
      • array(4) { [0]=> string(7) "Michael" [1]=> string(5) "Terry" [2]=> string(4) "John" [ 3]=> 字符串(7) "菲利普" }
      • 亲自尝试一下,Niladri:$lines = array("test", "test2");foreach($lines as $line) { $lines[] = $line;}var_dump($lines);,您会发现最终转储中有 4 个密钥。
      猜你喜欢
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多