Codeigniter框架下函数间传递数组并合并数组的问题求解
问题根因
报错的核心原因是payment_page方法的入参默认值设置错误:你给$data设置的默认值是空字符串'',array_merge要求传入的参数必须为数组,当没有传参直接调用该方法(比如你表单action直接指向payment_page路由)时,$data就会取默认的字符串值,触发类型不匹配报错。
另外方法内单独写的$data;属于无意义冗余代码,不产生任何实际作用。
报错原文:
Severity: Warning
Message: array_merge(): Expected parameter 1 to be an array, string given
修复方案
1. 调整入参默认值+增加类型校验
修改payment_page方法的参数默认值为空数组,同时增加类型校验兜底,避免非数组参数传入报错:
public function payment_page($data = []){ // 类型兜底,确保$data一定是数组 if (!is_array($data)) { $data = []; } $other_data = [ 'cardname' => $this->input->post('cardname'), 'cardno' => $this->input->post('cardno'), 'cardcvv' => $this->input->post('cardcvv'), 'cardmonth' => $this->input->post('cardmonth'), 'cardyear' => $this->input->post('cardyear') ]; $main_data = array_merge($data, $other_data); // 后续可按需处理$main_data,比如传入视图、存入数据库等 }
2. 调整业务路由逻辑(按需)
你当前表单的action直接配置为Welcome/payment_page,这种场景下userid、payment两个参数不会被传入payment_page,如果你的业务流程需要先经过payment方法处理参数,建议将表单action改为指向Welcome/payment,处理完成后再调用payment_page方法,或者用session存储中间参数避免数据丢失。
内容的提问来源于stack exchange,提问作者KUMAR
相关产品推荐
相关产品推荐

