PHP生成sitemap时implode差异化拼接字段的解决方案咨询
解决方法
你需要的最终路径格式为 name/canton/city/iid_branch_id,有两种可落地的方案:
方案1:修改Sitemap类内部拼接逻辑(推荐,通用性更强)
找到Sitemap类中拼接字段生成路径的代码段,原逻辑大概率是直接用implode('/', $字段值数组)实现的全斜杠拼接,调整为如下逻辑即可:
// Sitemap类内字段拼接部分修改示例 $fieldTotal = count($this->fields); $pathSegments = []; // 前N-2个字段按原规则用斜杠拼接 for ($i = 0; $i < $fieldTotal - 2; $i++) { $pathSegments[] = $row[$this->fields[$i]] ?? $this->defaultValue; } // 最后两个字段用下划线拼接后作为单独的路径段 $lastSegment = ($row[$this->fields[$fieldTotal - 2]] ?? $this->defaultValue) . '_' . ($row[$this->fields[$fieldTotal - 1]] ?? $this->defaultValue); $pathSegments[] = $lastSegment; // 整体拼接为最终路径 $finalPath = implode('/', $pathSegments);
修改后你原来的调用代码不需要做任何改动,直接运行即可满足需求。
方案2:不修改原类,预处理传入字段
如果不想改动Sitemap类的源码,可以在查询数据阶段就把iid和branch_id拼接成单个字段,再传入Sitemap类:
echo "Creating Sitemap\n"; // 字段数组替换为合并后的自定义字段 $switzerland= new Sitemap( $switzerlandcodes_sitefile, ["name","canton","city","iid_branch_id"], "UNKNOWN", $homeUrl.SWITZERLANDPATH.'/', // 对应查询SQL中添加 CONCAT(iid, '_', branch_id) AS iid_branch_id 即可 SWITZERLANDTABLE ); $switzerland->createSitemap(); $files=array_merge($files,$switzerland->files);
内容的提问来源于stack exchange,提问作者Kousik Dey
相关产品推荐
相关产品推荐

