首页 > 解决方案 > 使用 ForEach 语句将值存储在数组中

问题描述

尝试使用 for each 语句在数组中存储值时遇到问题。所以我的程序的目的是将文本文件的内容存储在一个数组中,通过这样做我能够检查用户的输入是否与文本文件中存储的内容相同。问题是当将数组中的值与用户输入进行比较时,程序无法检测用户输入是否与存储在数组中的内容相同。我对这种情况的判断是,当使用 for each 语句将文本文件的内容存储到数组中时,会在每个值之间添加空间。(我的判断可能是错误的)。

主要代码:

<html>
<body>
<form name="LoginForm" method="post">
    <label>Username</label>
    <input type="text" name="Username"/>

    <label>Password </label>
    <input type="Password" name="Password"  />

    <input type="submit"/>
</form>

<?php
$Username = $_POST["Username"];
$Password = $_POST["Password"];

$CollectedDetails = file('UsernamesandPasswords.txt');

$Array = array();

foreach($CollectedDetails as $EachValue)
{
$Array[] = $EachValue;
}

for($Loop = 0; $Loop < 6; $Loop+=2)
{
if($Username == $Array[$Loop] && $Password == $Array[$Loop+1])
{
    echo "Access Permitted";
}
else 
{
    echo "Access Denied";
}
}
?>
</body>
</html>

存储在文本文件中的内容 Dave Password Lucy Password2 Chris Password3

下面是上面程序的工作更新版本,没有添加文本文件。(我决定添加它以防万一)。

<html>
<body>
<form name="LoginForm" method="post">
    <label>Username</label>
    <input type="text" name="Username"/>

    <label>Password </label>
    <input type="Password" name="Password"  />

    <input type="submit"/>

</form>

<?php
$Username = $_POST["Username"];
$Password = $_POST["Password"];

$Array = array(Dave,Password,Lucy,Password2,Chris,Password3);

$Successful = false;

for($Loop = 0; $Loop < 6; $Loop+=2)
{
if($Username == $Array[$Loop] && $Password == $Array[$Loop+1])
{
    echo "Access Permitted";
    $Successful = true;
}
else if ($Successful == false)
{
    echo "Access Denied";
}   
}
?>
</body>
</html>

请注意,这两个程序都应该产生相同的结果。这个问题有没有可能的解决方案,我似乎无法弄清楚这个问题。任何帮助,将不胜感激。

标签: phparraysforeach

解决方案


你的问题是file给你附加换行符的值。从手册

注意:
结果数组中的每一行都将包括行尾,除非FILE_IGNORE_NEW_LINES使用。

要解决此问题,您可以FILE_IGNORE_NEW_LINES在通话中包含该选项,即

$CollectedDetails = file('UsernamesandPasswords.txt', FILE_IGNORE_NEW_LINES);

或者你可以trim在比较它们之前的值,即

$Array[] = trim($EachValue);

如果文件中有其他意外的空白,使用trim可能会更安全。


推荐阅读