我想从他的文件中删除所有用户名和密码并输出得很好。 我在我的计算机上的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
答案 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";