CodeIgniter 3中使用set_value时出现数组转字符串转换错误
解决CodeIgniter中数组形式表单字段的set_value报错问题
你遇到的“Array to string conversion”错误,原因是当表单字段name为speed[]这种数组格式时,直接调用set_value('speed[]')会返回整个数组,而echo无法直接输出数组,因此触发了转换错误。
正确的实现方式分两种场景:
1. 固定数量的数组字段
如果表单是固定几个带索引的输入框,直接给name指定具体索引,同时在set_value里对应索引即可:
<input type="text" name="speed[0]" value="<?php echo set_value('speed[0]'); ?>" /> <input type="text" name="speed[1]" value="<?php echo set_value('speed[1]'); ?>" />
这样set_value会返回单个字段的值,不会返回数组,就能正常保留输入内容。
2. 动态生成的数组字段
如果是用户可动态添加的多个speed[]输入框,需要结合循环处理:
- 先在控制器里获取提交的数组(为空时设默认空数组):
$speed_list = $this->input->post('speed') ?? [];
- 然后在视图里循环生成输入框,给每个输入框对应索引的set_value:
<!-- 显示已提交的输入内容 --> <?php foreach ($speed_list as $idx => $val): ?> <input type="text" name="speed[]" value="<?php echo set_value('speed[' . $idx . ']'); ?>" /> <?php endforeach; ?> <!-- 额外显示几个空输入框(示例默认补到3个) --> <?php $need_add = 3 - count($speed_list); ?> <?php for ($i = 0; $i < $need_add; $i++): ?> <input type="text" name="speed[]" value="<?php echo set_value('speed[' . (count($speed_list) + $i) . ']'); ?>" /> <?php endfor; ?>
补充:数组字段的验证规则设置
要确保每个数组元素都能被验证,规则可以这样写:
$this->form_validation->set_rules('speed[]', '速度值', 'required|numeric', [ 'required' => '请填写速度值', 'numeric' => '速度必须是有效数字' ]);
内容的提问来源于stack exchange,提问作者Abaij
相关产品推荐
相关产品推荐

