所以我是PHP的新手,我正在努力完成一些非常简单的事情。将文本文件导入到数组中,让foreach遍历该数组以查找值,并在找到时打印该值。
这是我到目前为止所尝试的内容:
$testers = file('test.txt');
foreach ($testers as $test) {echo $test . "<br />";}
这很好用,每行都打印出来。完善。 然后我添加一个IF语句。
$testers = file('test.txt');
foreach ($testers as $test) {if ($test){echo $test . "<br />";}}
也工作正常,似乎是返回数据。现在,如果我尝试添加一个运算符,它就会崩溃。
$testers = file('test.txt');
foreach ($testers as $test) {if ($test == "One"){echo $test . "<br />";}}
我应该说,文本文件中包含从“One”到“Six”的每一行的数字 我也尝试过:
$testers = file('test.txt');
foreach ($testers as $test) {if ($test === "One"){echo $test . "<br />";}}
这也没有回复......
任何见解都会很棒!谢谢!
我到底错过了什么?为什么这个if语句没有返回我正在寻找的值?!
答案 0 :(得分:5)
您的问题是因为默认情况下file()
会在每行中包含换行符。因此,平等的比较将失败。
您可以使用:
$testers = file('test.txt', FILE_IGNORE_NEW_LINES);
即。添加标志,以便PHP不会在生成的数组项中包含换行符。
如果您不想列出空行,则会显示相应的FILE_SKIP_EMPTY_LINES
标记,因此:
$testers = file('test.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
答案 1 :(得分:1)
您应该使用stripos()
进行检查,然后在array_filter
之前删除$testers
数组中的空条目。
<?php
$testers = array_filter(file('test.txt'));
foreach ($testers as $test) {if (stripos($test,"One")!==false){echo $test . "<br />";}}
答案 2 :(得分:1)
如果您想比较每一行是否与另一行相等,请查看strcmp
如果您想查看某行是否包含字符串,请检查strpos enter link description here
对于strcmp:
foreach ($testers as $test) {if (strcmp($test,"one")==0){echo $test . "<br />";}}
对于strpos:
foreach ($testers as $test) {if (strpos($test,"one") !==false){echo $test . "<br />";}}