You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:24:08