在下面的代码片段中,我正在使用strcasecmp()函数.该函数适用于名字匹配,但不适用于姓氏.
例如,如果我将名称Joe Black用于名称文件并提交名称空白,则$ xxx和$ yyy的值分别为-3和-6.如果提交名称我得到$ xxx = 0和$ yyy = -1.
有人能说出我错过了什么或做错了什么?
谢谢
克里斯
<?php
$fname = $_POST["fname"];
$lname = $_POST["lname"];
print "First Name: " .$fname;
print "< br/>";
print "Last Name: " . $lname;
$namesFile = "namesFile.txt";
$numLines = count(file($namesFile));
print "< br/>";
print "Lines: " . $numLines;
$fh = fopen ($psswrdFile, "r");
for ($i=1; $i <= $numLines; $i++)
{
$lineData = fgets($fh);
print "< br/>";
print $lineData;
list($firstName, $lastName) = explode(" ", $lineData);
print "First Name: " .$firstName;
print "Last Name: " . $lastName;
$xxx = strcasecmp($fname,$firstName);
print "name " . $xxx;
$yyy = strcasecmp($lname, $lastName);
print "password" . $yyy;
}
?>
Run Code Online (Sandbox Code Playgroud)
您的问题是fgets()包含其读取的行中的行尾字符.这意味着你$linedata的"Joe Black"实际上是"Joe Black \n",即它包含换行符.因此,$ lastName最终为"Black \n"而不是"Black".
作为一个快速修复,我将使用stream_get_line()而不是fgets,指定"\n"作为分隔符.这将与fgets()非常相似,除非它不会将分隔符读入您返回的字符串中.
或者保留你的fgets(),然后从你给你的字符串中删除换行符......正如@kavisiegel所提到的,这trim()是一种简单的方法(虽然从技术上来说我rtrim()会更快!)
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |