CodeIgniter中使用foreach循环插入两个关联数组报错如何解决
错误原因
你写的foreach( $options as $option and $senti as $sen )是不合法的PHP语法,PHP原生不支持通过and关键字在一个foreach里同时遍历两个独立数组,因此会直接触发语法报错。
解决方案
因为你两个数组都是同一份表单提交的字段数据,默认下标是一一对应的,直接通过数组键关联取值即可,可用以下两种实现方案:
方案1:单循环关联取值(最直观易维护)
$senti = $this->input->post('field_id'); $options = $this->input->post('field'); // 可选校验:确保两个数组长度一致,避免数据不匹配导致报错 if (count($options) !== count($senti)) { show_error('提交的字段数据不匹配'); } // 重置数组下标,避免两个数组键名不对应导致取值失败 $options = array_values($options); $senti = array_values($senti); foreach ($options as $key => $option) { // 取同下标的senti数组元素 $sen = $senti[$key]; $insert_option = [ 'form_id' => $token, 'name' => $this->db->escape_str($option['name']), 'fillup_id' => $rand, 'field_id' => $this->db->escape_str($sen['id']) ]; $this->db->insert('form_value', $insert_option); }
方案2:批量插入优化(性能更高)
如果插入数据量较大,建议使用CodeIgniter自带的insert_batch方法一次性插入所有数据,减少数据库连接IO开销:
$senti = $this->input->post('field_id'); $options = $this->input->post('field'); if (count($options) !== count($senti)) { show_error('提交的字段数据不匹配'); } $options = array_values($options); $senti = array_values($senti); $insertData = []; foreach ($options as $key => $option) { $insertData[] = [ 'form_id' => $token, 'name' => $this->db->escape_str($option['name']), 'fillup_id' => $rand, 'field_id' => $this->db->escape_str($senti[$key]['id']) ]; } // 一次性批量插入所有数据 if (!empty($insertData)) { $this->db->insert_batch('form_value', $insertData); }
内容的提问来源于stack exchange,提问作者Priya Sharma
相关产品推荐
相关产品推荐

