CodeIgniter 3中如何绑定数据并显示医生所属科室名称
解决CodeIgniter3中Bootstrap表格显示科室名称而非ID的问题
问题原因
你之前尝试的<?=$department_list[$dl['department']]; ?>报错,是因为$department_list是二维数组(由result_array()返回,每个元素是包含id和name的数组),而不是以科室ID为键、名称为值的一维映射数组。直接用科室ID作为数组索引,要么找不到对应元素,要么取到的是整个科室数组而非名称。
解决方案
方案1:将科室列表转换为ID映射数组(前端处理)
修改Controller中获取科室列表的代码,把二维数组转成以科室ID为键的一维数组:
// 原代码 // $data['department_list'] = $this->db->get('departments')->result_array(); // 修改后 $departments = $this->db->get('departments')->result_array(); $department_map = []; foreach ($departments as $dept) { $department_map[$dept['id']] = $dept['name']; } $data['department_map'] = $department_map;
然后在View中调用映射数组,同时增加空值兼容(避免科室ID无效时报错):
<td><?=$department_map[$dl['department']] ?? '未分配科室'; ?></td>
方案2:SQL联表查询(推荐,更高效)
直接在查询医生列表时关联科室表,一次性取出科室名称,避免后端额外处理数组:
修改Controller中获取医生列表的代码:
// 原代码 // $data['doctors_list'] = $this->db->get_where('user', ['role_id' => 2])->result_array(); // 修改后 $this->db->select('user.*, departments.name as department_name'); $this->db->from('user'); // 左连接确保即使医生未分配科室也能正常显示 $this->db->join('departments', 'user.department = departments.id', 'left'); $this->db->where('user.role_id', 2); $data['doctors_list'] = $this->db->get()->result_array();
然后在View中直接调用查询出来的科室名称字段:
<td><?=$dl['department_name'] ?? '未分配科室'; ?></td>
内容的提问来源于stack exchange,提问作者Hay Blog
相关产品推荐
相关产品推荐

