You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比数据库字段与对象数组值,解决where_in数组转字符串报错

问题原因

CodeIgniter的where_in()方法要求传入的匹配值为一维值数组,你当前传入的$varIds是对象数组,每个元素是包含var_id属性的对象,框架拼接SQL时尝试将对象转为字符串,就触发了「array to string conversion」错误。

解决方案

方案一:临时转换对象数组为一维值数组

在执行where_in前先提取所有var_id属性的值,构造符合要求的一维数组:

// 提取所有var_id属性,得到['141','143','146','149']格式的一维数组
$filterVarIds = array_column($varIds, 'var_id');
$this->db->where_in('items_options_value.var_id', $filterVarIds);

如果你的PHP版本低于7.0,不支持array_column处理对象数组,可以改用array_map实现转换:

$filterVarIds = array_map(function($item) {
    return $item->var_id;
}, $varIds);
$this->db->where_in('items_options_value.var_id', $filterVarIds);

方案二:优化原查询方法返回格式(可选)

如果get_var_id()方法的业务场景只需要用到var_id的值,你可以直接修改该模型方法,查询时直接返回一维值数组,省去后续转换步骤:
以CodeIgniter3为例,原查询如果返回的是对象数组:

// 原写法
return $this->db->select('var_id')->get()->result();

修改为直接返回一维数组:

// 修改后写法
$res = $this->db->select('var_id')->get()->result_array();
return array_column($res, 'var_id');

后续直接用返回的数组传入where_in即可正常执行。

内容的提问来源于stack exchange,提问作者Aasem Shoshari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:06:02