PHP HTML表格类单元格属性赋值异常问题排查
问题排查:HTML单元格属性赋值异常原因分析
异常根源:getHtmlAttributes方法逻辑漏洞
第二行第3个及以后单元格出现0='Array' 1='Array'的错误输出,核心问题出在属性处理方法的判断逻辑上:
当处理第二行(row=1)的第3个单元格(column=2)时:
- 代码确认
$this->html_attributes['cell'][1]存在(对应调用时传入的第二行cell属性数组) - 进入
section === "cell"分支后,检查array_key_exists(2, $this->html_attributes['cell'][1])——但调用时第二行只传了索引0和1的cell属性,索引2不存在,这个判断不成立 - 方法没有直接返回空数组,而是跳出cell分支,执行
return $this->html_attributes['cell'][1];,把第二行的整个cell属性数组(包含两个子数组)返回 - 渲染HTML属性时,这个二维数组被当成普通键值对解析:数组索引0、1变成属性名,对应的子数组被转成字符串"Array",于是出现错误输出
第三行正常的原因
第三行的cell属性数组里,每个column索引(0到6)都显式定义了元素(哪怕是空数组),所以不管哪个column,array_key_exists都为true,会返回对应的空数组,自然不会出错。
修复方案
修改getHtmlAttributes方法,在cell分支里,指定column不存在时直接返回空数组,避免返回整个row的属性数组:
private function getHtmlAttributes(string $section, int $row, int $column): array { if (count($this->html_attributes[$section]) > 0 && array_key_exists($row, $this->html_attributes[$section])) { if ($section === "cell") { // 仅当column存在时返回对应属性,否则返回空数组 return array_key_exists($column, $this->html_attributes[$section][$row]) ? $this->html_attributes[$section][$row][$column] : []; } return $this->html_attributes[$section][$row]; } return []; }
内容的提问来源于stack exchange,提问作者julio
相关产品推荐
相关产品推荐

