[英]php foreach in foreach looping
我想从他的文件中提取所有用户名和密码,并将其很好地输出。 我在计算机上的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
for ($i=0;$i<count($usernames) && $i<count($password); $i++) {
echo $usernames[$i].':'.$passwords[$i];
}
但是$ password [x]必须与$ usernames [x]相关
与帖子作者进行调试后,我猜想问题出在行返回字符上。 使用\\r\\n
解决了问题:
$usernames = explode("\n\r", file_get_contents("usernames.txt"));
$passwords = explode("\n\r", file_get_contents("passwords.txt"));
作为参考,请注意不要认为输入数据正确是非常重要的。 如果您发现有问题,并且明显地指出了您先前犯的一个错误(在那种情况下,显然不是foreach函数是bug,而是数组),那么您需要放下骄傲并调试自己的代码。 我从事PHP编程已有10年了,但我仍然必须记住每一天。
总是有那些人会说您不需要 (但通常不需要),但是当我解析这些平面文件时,我倾向于使用正则表达式-总是有一些古怪的字符,额外的换行符或差异会发现它进入文本文件的方式-是从传输服务器,还原备份还是仅仅是用户干扰。 如果您希望继续使用foreach
循环,也可以在这种情况下使用array_combine
我知道有些人出于可读性的考虑。
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";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.