渲染Schema Org结构化数据时如何移除数组自动生成的数字键
问题原因
你遇到的数字键问题本质是PHP在执行JSON序列化时,将非连续索引的数组识别为关联数组,自动转换为JSON对象格式,而schema.org的FAQPage规范要求mainEntity字段必须为数组格式。
解决步骤
1. 重置数组索引(核心修复)
修改addFaq方法,使用array_values重置self::$items的索引,保证数组为从0开始的连续索引结构,JSON序列化时就会自动转为数组格式:
public static function addFaq() { self::addCustom([ "@context" => "http://schema.org", "@type" => "FAQPage", "mainEntity" => array_values(self::$items) ]); }
2. 检查静态变量初始化
确认self::$items在类中初始化时为标准空索引数组:
// 类内静态变量声明示例 public static $items = [];
3. 确认JSON序列化参数
检查addCustom方法中调用json_encode的逻辑,不要添加JSON_FORCE_OBJECT参数,该参数会强制所有数组转为对象,导致结构异常。
修复后输出示例
{ "@context": "http://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "Question 1", "acceptedAnswer": { "@type": "Answer", "text": "Lorem ipsum dolor sit amet." } }, { "@type": "Question", "name": "Question 2", "acceptedAnswer": { "@type": "Answer", "text": "Lorem ipsum dolor sit amet." } } ] }
内容的提问来源于stack exchange,提问作者Filip Podhorský
相关产品推荐
相关产品推荐

