fastadmin 如何使用foeach循环带有setadata的数据,并且让题型相同的,在一起输出
控制器
public function getquestion($ids = null)
{
// 获取试卷名称
$now_exam_name=$this->model->where('id', $ids)->value('exam_name');
// 获取试卷的题目
$nowtimus = Db::name('cms_exams_element')->where('exams_id', $ids)->column('question_id');
// 把题目放进数组
$question_obj = Db::name('CmsArchives');
$arr = $question_obj->where('id','in',$nowtimus)->select();
// halt($arr);
// $questions=[];
foreach ($arr as $k=>$v){
// halt($v);
// 解析每个selectdata数组
$arr[$k]['selectdata'] = json_decode($arr[$k]['selectdata'], true);
// halt( $arr[$k]['selectdata']);
$arr[$k]['answer']=explode(',',$arr[$k]['answer']);
}
$questions=$arr;
$typelist=["1" => "单选题", "2" => "多选题", "3" => "判断题","4" => "填空题","5" => "简单题","6" => "组合题"];
$this->view->assign("typeList", $typelist);
// halt($questions);
$this->view->assign("questions", $questions);
$this->view->assign("now_exam_name", $now_exam_name);
return $this->view->fetch();
}
视图
<!--循环题目,我这里应该是循环文章-->
<!--name应该是行列数据,item应该是行数据,key表示行数-->
{foreach name='questions' item="vo" key="k"}
<div class="form-group">
这里显示题型信息
<h4>第{$k+1}题:{$typeList[$vo['type']]}</h4>
</div>
<!--对行数据,再次进行循环-->
<div class="form-group">
<h5>题目:{$vo['title']}<br></h5>
{foreach name='$vo["selectdata"]' item="select"}
{if condition="$vo['type'] eq 2"}
<input type="checkbox" value="{$select['key']}"
{:in_array($select['key'],$vo['answer'])?"checked":""} disabled>
{$select['key']}、{$select['value']}<br>
{else/}
<input type="radio" value="{$select['key']}"
{:in_array($select['key'],$vo['answer'])?"checked":""} disabled>
{$select['key']}、{$select['value']}<br>
{/if}
{/foreach}
</div>
{/foreach}
问题,如何吧,所有的填空题放在一起
也就是如何,把题型相同的放在一起?
分析了一下,参考插件的数据结构,发现,他在控制器层,就已经,把question的数据结构做好了。
也就是,吧所有题型相同的,放在了一起。
所以,实现步骤如下:
1.重构控制器的questions数据
2.那就要重新循环新数据
一路使用halt()来进行,数据结构的判断
最终的逻辑是,必须按照试卷的配置,来进行预览题目,不然,配置就毫无意义!