<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 學習統計功能(新版) # ## 1. 獲取mongodb數組 *D:\wamp\www\xue.test\xuetang\protected\modules\croom\controllers\ManageController.php* ~~~ /** * 學習統計:掌握考點情況數據統計 * @author wangbo 2019-1-21 * @method GET * @url croom/manage/myExerTagStatistics * @param * userID 必填 * end 默認當前日期 * begin 默認30天內 * @return json */ public function actionMyExerTagStatistics() { $userID = RequestUtils::getNormalRequest('userID'); //學生ID $end = RequestUtils::getNormalRequest('end', (time() + 3600 * 24) * 1000); $begin = RequestUtils::getNormalRequest('begin', (time() - 3600 * 24 * 30) * 1000); //默認是30天 $args['begin'] = $begin; $args['end'] = $end; $args['uid'] = $userID; if (!$userID) { //判斷是否是學生 ResponseUtils::json( null, 21, ResponseUtils::$rmsg[ 21 ] ); } // 獲取學生的考點樹形數組(一級,三級) $tagTree = V2StatisticsService::factory()->getTagTree($args); $exers = V2StatisticsService::factory()->getAnswerExerRecordByUserID($args); foreach ($exers as $v) { foreach ($v['tags'] as $tag) { if ($tag['tid'] == 3 && $tag['level'] == 1) { $tagTree[$tag['tv']]['totalQuestion']++; $tagTree[$tag['tv']]['totalScore']+=$v['total']; $tagTree[$tag['tv']]['myTotalScore']+=$v['score']; } if ($tag['tid'] == 3 && $tag['level'] == 3) { // 在樹形數組中找到對應的三級考點 foreach ($tagTree as $k => $item) { if (in_array($tag['tv'], array_keys($item['subTag']))) { $tagTree[$k]['subTag'][$tag['tv']]['totalQuestion']++; $tagTree[$k]['subTag'][$tag['tv']]['totalScore']+=$v['total']; $tagTree[$k]['subTag'][$tag['tv']]['myTotalScore']+=$v['score']; } } } } } // 計算得分率 foreach ($tagTree as $k => $v) { if ($v['totalScore'] != 0) { $tagTree[$k]['rate'] = round(($v['myTotalScore'] / $v['totalScore']) * 100); } foreach ($v['subTag'] as $i => $j) { if ($j['totalScore'] != 0) { $tagTree[$k]['subTag'][$i]['rate'] = round(($j['myTotalScore'] / $j['totalScore']) * 100); } } } // 去掉數組索引 $data = StatisticsService::factory()->unsetArrIndex($tagTree); // 數組按照得分率rate進行從高到低的排序 $data = StatisticsService::factory()->sortDataArr($data); foreach ($data as $k => $v) { if ($v['subTag']) { $data[$k]['subTag'] = StatisticsService::factory()->sortDataArr($v['subTag']); } } if (!$tagTree) { ResponseUtils::json(null, 1, 'error'); } ResponseUtils::json(['data' => $data]); } ~~~ *D:\wamp\www\xue.test\xuetang\protected\service\service2\V2StatisticsService.php* ~~~ /** * 查找該用戶練習記錄的考點,組裝成二維數組 * @param $args * @return array */ public function getTagTree($args) { /** @var EMongoClient $mongo */ $mongo = Yii::app()->mongodb; $collection = $mongo->selectCollection(WK::XT_EXER_RECORD_COLLECTION); $res = $this->getAnswerExerRecordByUserID($args); $arr = []; //三級考點 foreach ($res as $v) { foreach ($v['tags'] as $index => $item) { if ($item['tid'] == 3 && $item['level'] == 3) { if (!in_array($item['tv'], array_keys($arr))) { $temp = []; $temp['id'] = $parentID = $item['tv']; $tag = Tag::model()->findByPk($item['tv']); $temp['fdName'] = $tag->fdName; $temp['totalQuestion'] = 0; $temp['totalScore'] = 0; $temp['myTotalScore'] = 0; $arr[$item['tv']] = $temp; } } } } $arr2 = []; //一級考點 foreach ($arr as $k => $v) { $parent = TagService::factory()->getParentTag($v['id']); if (!in_array($parent->id, array_keys($arr2))) { $arr2[$parent->id]['id'] = $parent->id; $arr2[$parent->id]['fdName'] = $parent->fdName; $arr2[$parent->id]['totalQuestion'] = 0; $arr2[$parent->id]['totalScore'] = 0; $arr2[$parent->id]['myTotalScore'] = 0; } $arr2[$parent->id]['subTag'][$k] = $v; } return $arr2; } ~~~ ~~~ /* * * 通過MongoDB獲取用戶的練習記錄 * @param $args * @author wangbo 2019-2-21 */ public function getAnswerExerRecordByUserID($args) { /** @var EMongoClient $mongo */ $mongo = Yii::app()->mongodb; $collection = $mongo->selectCollection(WK::XT_EXER_RECORD_COLLECTION); $args['begin'] = $args['begin'] ? new MongoDate($args['begin'] / 1000 + 8 * 60 * 60) : new MongoDate(strtotime('-1 year')); $args['end'] = $args['end'] ? new MongoDate($args['end'] / 1000 + 8 * 60 * 60) : new MongoDate(time() + 8 * 60 * 60); $res = $collection->aggregate(array( array( '$match' => array( 'uid' => (int)$args['uid'], //必須強制轉換為整型,如果是string類型,數據無法匹配 'date' => array( '$gte' => $args['begin'], '$lte' => $args['end'], ) ), ), array( '$project' => array( '_id' => 0, 'exid' => 1, 'eid' => 1, 'tags' => 1, 'score' => 1, 'total' => 1, 'scoreRate' => 1, 'date' => 1, ), ), array( '$sort' => array( 'date' => -1, // 日期倒序 ) ) )); return (array)$res['result']; } ~~~ ## 2. 操作數組 *D:\wamp\www\xue.test\xuetang\protected\service\StatisticsService.php* ~~~ /** * 將數組的值,按照數組中的rate值,從高到低進行排序 * @param $data * @return array * @author wangbo 2019-2-22 */ public function sortDataArr($data) { $key = []; //第一步:獲取rate數組并排序 foreach ($data as $k => $v) { if (!in_array($v['rate'], array_values($key))) { $key[] = $v['rate']; } } rsort($key); //獲取到要排序的索引值得排序 //第二步:組裝數組 $arr2 = []; foreach ($key as $v) { foreach ($data as $i => $j) { if ($j['rate'] == $v) { $arr2[] = $j; } } } return $arr2; } /* * * 去掉數組索引 * @param $tagTree * @author wangbo 2019-2-22 */ public function unsetArrIndex($tagTree) { $data = []; foreach ($tagTree as $k => $v) { $data[] = $v; } foreach ($data as $k => $v) { $temp = []; foreach ($v['subTag'] as $item) { $temp[] = $item; } $data[$k]['subTag'] = $temp; } return $data; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看