/** * @param $restrict * @return CArrayList */ public function getIndPlansByYears($restrict = 0) { $result = new CArrayList(); foreach ($this->loads->getItems() as $load) { $year = new CArrayList(); if ($result->hasElement($load->year_id)) { $year = $result->getItem($load->year_id); } $year->add($load->getId(), $load); $result->add($load->year_id, $year); } /** * Если есть ограничение, то все, которые под него не попадают * исключаем из результатов */ if ($restrict > 0) { foreach ($result->getItems() as $year => $load) { if ($year != $restrict) { $result->removeItem($year); } } } return $result; }
/** * Сгенерировать указанное количество вопросов по указанным параметрам * * @param $speciality_id * @param $course * @param $year_id * @param $discipline_id * @param $category_id * @param $count * @return CArrayList */ private function getQuestionsByParams($speciality_id, $course, $year_id, $discipline_id, $category_id, $count) { $res = new CArrayList(); // получим все вопросы по указанной дисциплине $questions = new CArrayList(); foreach (CExamManager::getAllQuestions()->getItems() as $q) { if ($q->speciality_id == $speciality_id) { if ($q->course == $course) { if ($q->year_id == $year_id) { if ($q->discipline_id == $discipline_id) { if ($q->category_id == $category_id) { $questions->add($q->getId(), $q); } } } } } } // если ничего не нашлось, то выходим if ($questions->getCount() == 0) { return $res; } // если полученное количество вопросов больше требуемого, то берем // случайные значения, если меньше, то тоже берем случайные значения // до тех пор, пока не наберем столько, сколько надо if ($questions->getCount() >= $count) { for ($i = 0; $i < $count; $i++) { $q = $questions->getShuffled()->getFirstItem(); $res->add($res->getCount(), $q); $questions->removeItem($q->getId()); } } else { $backup = $questions->getCopy(); $i = 0; while ($i < $count) { $q = $questions->getShuffled()->getFirstItem(); $res->add($res->getCount(), $q); $questions->removeItem($q->getId()); if ($questions->getCount() == 0) { $questions = $backup->getCopy(); } $i++; } } return $res; }