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

如何从tool_courserating\local\models\rating对象获取数据及遍历数组?

获取Rating对象中的值及数组遍历方法

一、获取rating值的正确方式

你当前用(object)强制转换get_record的返回值是多余的,因为get_record本身返回的就是tool_courserating\local\models\rating对象。这类继承自Moodle core\persistent的类,提供了标准的取值方法,无需直接访问私有属性:

推荐方法:使用类的get()方法

直接调用对象的get()方法并传入字段名即可:

$rating = tool_courserating\local\models\rating::get_record(['courseid' => $courseData->id]);
$ratingValue = $rating->get('rating'); // 拿到rating值4
echo $ratingValue;

不推荐的私有属性访问方式(仅作参考)

由于data是私有属性,正常语法无法直接访问。如果非要绕过封装(不建议,易受版本更新影响),可通过反射实现:

$reflection = new ReflectionClass($rating);
$dataProperty = $reflection->getProperty('data');
$dataProperty->setAccessible(true);
$dataArray = $dataProperty->getValue($rating);
$ratingValue = $dataArray['rating'];

二、数组的foreach遍历方法

如果通过get_records()获取多条评分记录的数组,分两种场景处理:

遍历rating对象数组

遍历每个对象并调用get()方法取值:

$ratings = tool_courserating\local\models\rating::get_records(['courseid' => $courseData->id]);
foreach ($ratings as $ratingId => $ratingObj) {
    $ratingValue = $ratingObj->get('rating');
    $userId = $ratingObj->get('userid');
    echo "用户ID{$userId}的评分是{$ratingValue}\n";
}

遍历纯数据数组

利用persistent类的to_array()方法,将对象转为字段数组后遍历:

$ratings = tool_courserating\local\models\rating::get_records(['courseid' => $courseData->id]);
foreach ($ratings as $ratingObj) {
    $dataArray = $ratingObj->to_array();
    foreach ($dataArray as $key => $value) {
        echo "{$key}: {$value}\n";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:43:25