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

在CodeIgniter中如何通过ID或Code从MySQL结果获取行索引

完善getPosition函数:通过ID或Code获取数组索引

看起来你已经拿到了MySQL查询后的结果数组,现在需要实现一个函数来通过id或code字段定位对应行在数组中的索引。我来帮你完善这个函数,直接上代码和实用说明:

首先,先把你的示例查询结果整理成更清晰的PHP数组格式:

// 你的MySQL查询结果数组
$userResults = [
    ['id' => 12, 'code' => 12345, 'name' => 'Aaron'],
    ['id' => 5, 'code' => 16784, 'name' => 'Bryan'],
    ['id' => 35, 'code' => 32467, 'name' => 'Charlie'],
    ['id' => 25, 'code' => 44513, 'name' => 'Denise'],
    ['id' => 44, 'code' => 15774, 'name' => 'Michael'],
];

接下来是完善后的getPosition函数,我增加了参数校验、字段合法性检查和容错处理,让函数更健壮:

private function getPosition($field_search, $field_value, $resultArray) {
    // 限定只能用id或code作为搜索字段,避免非法字段传入导致错误
    $allowedFields = ['id', 'code'];
    if (!in_array($field_search, $allowedFields)) {
        return false; // 也可以抛出异常,根据你的错误处理习惯调整
    }

    // 遍历结果数组,逐个匹配目标字段的值
    foreach ($resultArray as $index => $row) {
        // 先检查当前行是否存在目标字段,防止Undefined index报错
        if (isset($row[$field_search]) && $row[$field_search] == $field_value) {
            return $index; // 找到匹配项后立即返回索引,提升遍历效率
        }
    }

    // 遍历完未找到匹配项,返回false或null均可
    return false;
}

调用示例

你可以在模型里这样使用这个函数:

// 通过id=25查找对应行的索引
$deniseIndex = $this->getPosition('id', 25, $userResults);
// 输出结果:3

// 通过code=16784查找对应行的索引
$bryanIndex = $this->getPosition('code', 16784, $userResults);
// 输出结果:1

额外优化说明

  • 字段合法性校验:添加$allowedFields限制搜索字段,避免传入错误字段引发的问题;
  • 容错处理:用isset()检查字段是否存在,防止数组行结构异常时出现报错;
  • 匹配方式:这里用的是松散比较==,如果你的id/code是严格类型(比如id是整数,传入参数也是整数),可以改成严格比较===;
  • 批量匹配:如果场景需要返回所有匹配项的索引,可以修改逻辑为收集索引到数组后返回;
  • 参数简化:如果模型里已将查询结果存储在类属性(比如$this->userData),可以去掉$resultArray参数,直接在函数内使用$this->userData遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:16:23