我正在学习PHP,并且现在我陷入困境。我正在阅读脚本中的.txt文件。文件内容如下:
joe:secret
root:admin
我可以使用该file()
函数轻松读取文件,该函数返回一个数组。我将数据存储在a变量中为:
$data = file('location/file.txt');
接下来,我使用foreach循环,然后展开每一行,并将其内容再次存储在变量中。然后,我对变量进行检查,但这是我无法理解的行为。
foreach ($data as $d) {
$row = explode(":", $d);
if ($row[0] == "joe" && $row[1] == "secret") {
echo "match found ";
}
}
上面的代码确实给出了预期的输出。这是为什么?如果我这样做
echo $row[0]; echo $row[1];
然后我会收到正确的输出。所以我不明白为什么我的支票失败了?
这是一个棘手的问题。我不怪你没抓住这个:)
因此,首先,让我们研究一下php -a
交互式shell:
php > $data = file('test.txt');
php > var_dump($data);
array(3) {
[0]=>
string(11) "joe:secret
"
[1]=>
string(11) "root:admin
"
[2]=>
string(1) "
"
}
看看结尾的报价单行如何?这是因为\n
每一行末尾的都保留在中的每个数组元素内$data
。所以$row[1]
不等于"secret"
; 它等于"secret\n"
。要解决此问题,我们需要做的是rtrim()
:
foreach ($data as $line) {
$line = rtrim($line);
$row = explode(":", $line);
if ($row[0] == "joe" && $row[1] == "secret") {
echo "Match found for joe!";
}
}
现在,它可以按预期工作:
php > $data = file('test.txt');
php > foreach ($data as $line) {
php { $line = rtrim($line);
php { $row = explode(":", $line);
php {
php { if ($row[0] == "joe" && $row[1] == "secret") {
php { echo "Match found for joe!";
php { }
php { }
Match found for joe!
php >
编辑:我们也可以使用file_get_contents()
代替file()
,所以我们只是将文件内容作为字符串获取,然后将其自己转换为数组:
$data = file_get_contents('test.txt');
foreach (explode("\n", $data) as $line) {
$row = explode(":", $line);
if ($row[0] == "joe" && $row[1] == "secret") {
echo "Match found for joe!";
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句