CodeIgniter中如何提取指定数组内的ID值1、10、3、13?
问题:CodeIgniter中如何正确提取数组ID并批量更新数据?
我来帮你解决这个问题~首先理清楚你的数据结构和问题所在:
你提供的数组结构是这样的:
array(1) { [0] => array(2) { ["list_length"] => string(2) "10" ["id"] => array(4) { [0] => string(1) "1" [1] => string(2) "10" [2] => string(1) "3" [3] => string(2) "13" } } }
你的需求是拿到["id"]对应的那组值(1、10、3、13),然后用这些值作为条件,把trainee表中对应no字段的记录的recieve字段更新为1。但你当前的代码有两个关键问题:没有正确提取目标ID数组,也用错了数据库条件方法。
先看你尝试的代码:
public function recieve($data){ //var_dump($data); $ids = $data; var_dump($ids); $this->db->set('recieve', '1'); $this->db->where('no', $ids); $this->db->update('trainee')` }
正确的实现代码:
public function recieve($data){ // 第一步:精准提取ID数组 $ids = $data[0]['id']; // 第二步:用where_in批量匹配ID $this->db->set('recieve', '1'); // where_in会生成WHERE no IN (1,10,3,13)的SQL,适合多值匹配 $this->db->where_in('no', $ids); $this->db->update('trainee'); }
为什么这样改?
- 精准提取ID数组:你的
$data是一个外层数组,目标ID数组藏在$data[0]['id']里面,直接把整个$data赋值给$ids肯定拿不到正确的ID列表,必须精准定位到嵌套的id字段。 - 用where_in替代where:
where方法只能处理单个值的匹配,而你要匹配多个no值,where_in才是CodeIgniter中专门用来处理“字段值在数组范围内”的方法,它会自动生成符合SQL规范的IN语句。 - 语法修正:你原来的代码最后多了一个多余的反引号,要去掉才能保证代码正常运行。
内容的提问来源于stack exchange,提问作者John Uy
相关产品推荐
相关产品推荐

