我正在开发一个网站,希望管理员能够上传包含员工ID和姓名的.txt文件。我需要解析.txt文件并将信息插入数据库,但是在解析时一直出现错误。
我尝试按照PHP-解析txt文件的格式进行操作,但在我的第一个$行explode()之后,出现了多个非法或未定义偏移量的错误。
.txt文件内容:
我尝试按照PHP-解析txt文件的格式进行操作,但在我的第一个$行explode()之后,出现了多个非法或未定义偏移量的错误。
.txt文件内容:
186298 "Cushing,Kathy N"
167876 "Roberts,Joseph Allen"
109876 "Smith,Sarah Quinn"
118679 "Hernandez,Juan"
187568 "Freeman,Colby Matthew"
.php 函数:
function updateMemberList()
{
global $db_handle;
$tmpName = $_SESSION['filename'];
//$include_once ($_SERVER['DOCUMENT_ROOT'] . "../../uploads/updates/'$tmpName'");
$txt_file = file_get_contents("../../uploads/updates/$tmpName");
$rows = explode("\n", $txt_file);
foreach($rows as $row => $data)
{
//Splits data into employee ID and full name
$row_data = explode(' ', $data);
$info[$row]['empid'] = $row_data[0];
$info[$row]['name'] = $row_data[1]; //AFTER this line is where I start having errors
//Splits name into last name and first name
$row_name = explode(',', $info[$row]['name']);
$info[$row_name]['lname'] = $row_name[0];
$info[$row_name]['fname'] = $row_name[1];
//Cleans " off last name
$row_lname = explode('"', $info[$row_name]['lname']);
$info[$row_lname]['lname'] = $row_lname[1];
//Cleans middle name and " off first name
$row_fname1 = explode(' ', $info[$row]['fname']);
$info[$row]['fname'] = $row_fname1[0];
$row_fname2 = explode('"', $info[$row]['fname']);
$info[$row]['fname'] = $row_fname2[0];
//Declares variables
$uname = $info[row]['fname'] + "." + $info[$row]['lname'];
$fname = $info[row]['fname'];
$lname = $info[$row]['lname'];
$empid = $info[$row]['empid'];
//Checks to see if user is already in db
$query = ("SELECT * FROM user WHERE username = '$uname'");
$check = mysqli_query($db_handle, $query);
$num_rows = $check->num_rows;
//If user isn't in db, generates a password and adds them
if ($num_rows < 1)
{
//Generates random 8 character password
$length = 8;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
for ($i = 0; $i < $length; $i++)
{
$randomString[$i] = $characters[rand(0, $charactersLength - 1)];
}
$temppass = implode($randomString);
$pword = password_hash($temppass, PASSWORD_DEFAULT);
$addto = "INSERT INTO `user`(`username`, `first_name`, `last_name`, `employee_id`, `password_hash`, `isActive`, `firstLogin`) VALUES ('$uname', '$fname', '$lname', '$empid', '$pword', 1, 1)";
mysqli_query($db_handle, $addto);
}
}
}
有没有更简单的方法解析制表符之后的内容,以便抓取名字和姓氏,并且不会提示错误?
编辑:通过改用 .csv 文件而不是 .txt 文件解决了问题。
json_decode(file_get_contents($file))
)。 - Mike Millerexplode()
很少适用于这样的任务。而且这不像是 CSV,更像是 TSV。使用正则表达式可以更一致地提取信息。也可以避免按行迭代。(我也不会把两种都称作“解析”)。 - mario