
1. CSV文件上传与初步解析
在PHP应用中处理CSV文件通常涉及文件上传、读取和解析三个步骤。首先,我们需要一个HTML表单来允许用户选择并上传CSV文件。
当表单提交后,PHP脚本会接收上传的文件。以下PHP代码片段展示了如何读取CSV文件,并将其内容解析为一个由关联数组组成的数组。每个关联数组代表CSV文件中的一行,其键名对应CSV的标题行。
错误:无法打开上传的文件。";
} else {
$all_rows = array();
$header = fgetcsv($file); // 读取标题行
if ($header === false) {
echo "错误:CSV文件为空或无法读取标题。
";
} else {
while (($row = fgetcsv($file)) !== false) {
// 确保行数据与标题数量匹配,防止array_combine报错
if (count($header) == count($row)) {
$all_rows[] = array_combine($header, $row);
} else {
// 可以选择跳过不匹配的行或记录错误
echo "警告:CSV行数据与标题数量不匹配,跳过此行。
";
}
}
fclose($file); // 关闭文件句柄
echo "CSV文件已成功解析。
";
// 此时 $all_rows 包含了所有解析后的数据,例如:
/*
Array
(
[0] => Array
(
[query] => https://www.example.com/search/output/person/?loc=%5B%22105490917%22%2C%22101452733%22%5D&keywords=Computational%20Biologist&origin=host
[firstName] => John
[lastName] => Smith
)
// ... 更多行
)
*/
}
}
} else {
echo "文件上传失败或未选择文件。错误代码: " . ($_FILES['filename']['error'] ?? '未知') . "
";
}
}
?>2. URL参数提取与数据转换
我们的目标是从query键对应的URL中,提取keywords参数的值,并用它替换原始的URL字符串。例如,将https://...&keywords=Computational%20Biologist&origin=host转换为Computational Biologist。
为了实现这一目标,我们可以遍历 $all_rows 数组,并对每个元素的 query 键值应用一系列字符串处理函数:strstr、str_replace、substr 和 urldecode。
立即学习“PHP免费学习笔记(深入)”;
$row_data) {
if (isset($row_data['query'])) {
$original_query = $row_data['query'];
// 1. 使用 strstr 找到 'keywords=' 及其之后的所有内容
// 示例输入: "https://...&keywords=Computational%20Biologist&origin=host"
// 结果: "keywords=Computational%20Biologist&origin=host"
$temp_query = strstr($original_query, 'keywords=');
if ($temp_query !== false) {
// 2. 使用 str_replace 移除 'keywords=' 前缀
// 示例输入: "keywords=Computational%20Biologist&origin=host"
// 结果: "Computational%20Biologist&origin=host"
$temp_query = str_replace('keywords=', '', $temp_query);
// 3. 使用 substr 和 strpos 提取 '&' 之前的部分
// 示例输入: "Computational%20Biologist&origin=host"
// 结果: "Computational%20Biologist"
$amp_pos = strpos($temp_query, "&");
if ($amp_pos !== false) {
$temp_query = substr($temp_query, 0, $amp_pos);
}
// 如果没有找到 '&',则表示 'keywords' 是最后一个参数,
// 此时 $temp_query 已经是我们想要的部分,无需进一步处理 substr。
// 4. 使用 urldecode 解码 URL 编码的字符
// 示例输入: "Computational%20Biologist"
// 结果: "Computational Biologist"
$all_rows[$key]['query'] = urldecode($temp_query);
} else {
// 如果 URL 中没有 'keywords=' 参数,则保留原样或设置为默认值
$all_rows[$key]['query'] = ''; // 或者 $original_query;
}
}
}
// 打印处理后的数组以验证结果
echo "处理后的数据:
";
echo "";
print_r($all_rows);
echo "";
} else {
echo "没有可处理的数据。
";
}
?>经过上述处理,$all_rows 数组中的每个 query 键值都将被替换为提取出的、已解码的关键字。
3. 完整示例代码
以下是结合了文件上传、CSV解析和URL参数提取的完整PHP脚本。
CSV文件处理与URL关键字提取
