繁体   English   中英

PHP foreach在foreach循环中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM