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()来进行,数据结构的判断

最终的逻辑是,必须按照试卷的配置,来进行预览题目,不然,配置就毫无意义!

posted @ 2020-06-03 11:21  风意不止  阅读(2515)  评论(0编辑  收藏  举报