php foreach在foreach循环中

时间:2013-12-31 13:22:55

标签: php loops foreach file-get-contents

我想从他的文件中删除所有用户名和密码并输出得很好。 我在我的计算机上的appserv 2.5.1上编写了一个代码,但只有最后一个循环给出了用户名输出。 在其他机器上测试代码,它完美地工作。 不知道是什么问题...

usernames.txt内容:

user1
user2
user3

passwords.txt内容:

pass1
pass2
pass3

脚本内容:

$usernames = explode("\n", file_get_contents("usernames.txt"));
$passwords = explode("\n", file_get_contents("passwords.txt"));

foreach( $usernames as $username )
{
    foreach( $passwords as $password )
    {
        echo $username.":".$password."\n";
    }
}

输出:

:pass1
:pass2
:pass3
:pass1
:pass2
:pass3
user3:pass1
user3:pass2
user3:pass3

3 个答案:

答案 0 :(得分:7)

for ($i=0;$i<count($usernames) && $i<count($password); $i++) {
    echo $usernames[$i].':'.$passwords[$i];
}

但$ password [x]必须与$ usernames [x]

相关

答案 1 :(得分:1)

在与帖子作者调试之后,我猜测问题出在行返回字符上。使用\r\n解决了问题:

$usernames = explode("\n\r", file_get_contents("usernames.txt"));
$passwords = explode("\n\r", file_get_contents("passwords.txt"));

供参考,请注意,假设输入数据正确,非常重要。如果你发现某些事情是错误的,并且它明显指出你之前犯过的错误(在这种情况下,显然不是foreach函数是错误的,而是数组),那么你需要吞下自己的骄傲并调试自己的代码。我已经用PHP编程了10年,而且我仍然需要记住每一天。

答案 2 :(得分:1)

总有那些会说你不需要它(而且你经常不这样做)但我倾向于在解析这些平面文件时使用正则表达式 - 总会有一些古怪的角色,额外的换行符或差异,发现它进入文本文件 - 无论是转移服务器,恢复备份还是仅仅是用户干扰。如果你更喜欢继续使用array_combine循环,你也可以在这种情况下使用foreach - 我知道有些人喜欢它以便于阅读。

preg_match_all('/\w+/m', file_get_contents('usernames.txt'), $usernames);
preg_match_all('/\w+/m', file_get_contents('passwords.txt'), $passwords);

if(count($usernames[0]) !== count($passwords[0]))
    die('Computer says: mismatch!');  // some resemblance of error handling...

$result = array_combine($usernames[0], $passwords[0]);
foreach($result as $name => $pass)
    echo "{$name}:{$pass}\n";

demo