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

如何限制foreach循环仅显示指定用户的单条Enrolled/Not Enrolled日期?

解决用户特定注册日期展示的问题

嘿,我来帮你捋捋这个问题!你现在的核心需求是让每个用户只能看到自己的Enrolled Since和Not Enrolled Since,而不是所有用户的,同时还要解决行查询时的报错问题,下面分方案给你说明:

方案一:数据库查询阶段直接过滤(推荐)

从数据库层面直接筛选当前用户的数据是最优解,既减少数据传输量,又避免后续循环处理的冗余逻辑。结合你遇到的报错,大概率是用了CodeIgniter框架,这里给你正确的写法:

解决报错的关键:区分row_array()和result_array()

你遇到的Uncaught Error: Call to a member function result_array() on array,原因是把数组当成了查询结果对象来调用方法,或者用错了获取单条记录的方法:

  • result_array():返回多条记录的二维数组,适用于批量数据
  • row_array():返回单条记录的一维数组,正好匹配你的需求

正确的查询代码:

// 第一步:获取当前登录用户的ID(假设从session中获取,根据你的实际逻辑调整)
$current_user_id = $this->session->userdata('user_id');

// 第二步:只查询当前用户的注册日期数据
$user_enrollment = $this->db->select('enrolled_since, not_enrolled_since')
                            ->from('users') // 替换成你的表名
                            ->where('user_id', $current_user_id) // 用当前用户ID过滤
                            ->get()
                            ->row_array(); // 用row_array()获取单条记录

输出数据

因为已经拿到了当前用户的单条数据,直接输出即可,不需要foreach循环:

if (!empty($user_enrollment)) {
    echo "Enrolled Since: " . $user_enrollment['enrolled_since'];
    echo "<br>";
    echo "Not Enrolled Since: " . $user_enrollment['not_enrolled_since'];
}

方案二:循环时通过if判断过滤

如果因为某些场景无法在查询阶段过滤,也可以先获取所有用户数据,再在循环中只显示当前用户的记录:

// 获取所有用户数据
$all_users = $this->db->select('user_id, enrolled_since, not_enrolled_since')
                      ->from('users')
                      ->get()
                      ->result_array();

$current_user_id = $this->session->userdata('user_id');

// 循环遍历,只输出当前用户的记录
foreach ($all_users as $user) {
    if ($user['user_id'] === $current_user_id) {
        echo "Enrolled Since: " . $user['enrolled_since'] . "<br>";
        echo "Not Enrolled Since: " . $user['not_enrolled_since'] . "<br>";
        break; // 找到当前用户后就跳出循环,提升效率
    }
}

总结

优先选择方案一,不仅性能更好,逻辑也更清晰,彻底避免“所有用户看到同一条记录”的问题——因为每个用户查询的都是自己ID对应的数据。方案二作为备选,适合特殊场景下的临时处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:38:30