yii中的图表使用highcharts

时间:2015-10-28 12:28:04

标签: php yii charts highcharts

这是我的控制器

public function actionStudentChart()
        {
            $stu_track_id = Yii::app()->user->getState('stu_track_id');
            $model = MarkDetails::model()->findAllByAttributes(array('mark_stud_track_id' => $stu_track_id ));
            $stu_inst_id = Yii::app()->user->getState('stu_inst_id');
            $stu_class = Yii::app()->user->getState('stu_class');
            if(SchoolSubjectDetails::model()->findByAttributes(array('school_subj_inst_id' => $stu_inst_id , 'school_subj_class' => $stu_class)))
            {
                $schoolsubmodel = SchoolSubjectDetails::model()->findByAttributes(array('school_subj_inst_id' => $stu_inst_id , 'school_subj_class' => $stu_class));
            }
            if(!empty($schoolsubmodel->school_subject) && is_array(explode(',',$schoolsubmodel->school_subject)))
                            $schoolsubmodel->school_subject=explode(',',$schoolsubmodel->school_subject);
            $submodel = array();
            $sub_label = array();
            $sub_name = array();
            $marks[0] = array(90,80,80);
            $marks[1] = array(90,80,80);
            $marks[2] = array(90,80,80);
            $marks[3] = array(90,80,80);
            $marks[4] = array(90,80,80);
            for($i=0 ; $i<count($schoolsubmodel->school_subject) ; $i++)
            {
                $submodel[$i] = SubjectDetails::model()->findByAttributes(array('subject_id' =>$schoolsubmodel->school_subject[$i]));
                $sub_label[$i] = $submodel[$i]['subject_label'];
                $sub_name[$i] = $submodel[$i]['subject_name'];
            }
            foreach($model as $val)
            {
                for($i=0;$i<count($sub_label);$i++)
                {
                    $mrk[$i][]=$val[$sub_label[$i]];
                }
            }
            $this->render('studentchart',array(
                'model'=>$model,'sub_label'=>$sub_label,'sub_name'=>$sub_name,'marks'=>$marks,'mrk'=>$mrk,
            ));
        }

这是我的观看页面

if(!empty($model))
        {
            for($i=0 ; $i<count($model) ; $i++)
            {
                $exam_type[] = $this->_exam_type[$model[$i]->mark_exam_type];
            }
            for($i=0 ; $i<count($sub_label) ; $i++)
            {
                $chartData1[] = array( "name"=>$sub_name[$i] , "data"=>$marks[$i]);
                $chartData2[] = array( "name"=>$sub_name[$i] , "data"=>$mrk[$i]);
            }
            $this->Widget('ext.highcharts.HighchartsWidget', array(
               'options' => array(
                  'chart' => array('type' => 'bar'),
                  'title' => array('text' => false),
                  'xAxis' => array(
                     'categories' => $exam_type
                  ),
                  'yAxis' => array(
                     'title' => array('text' => 'Marks Obtain')
                  ),
                  'series' => $chartData1
               )
            ));
            $this->Widget('ext.highcharts.HighchartsWidget', array(
               'options' => array(
                  'chart' => array('type' => 'bar'),
                  'title' => array('text' => false),
                  'xAxis' => array(
                     'categories' => $exam_type
                  ),
                  'yAxis' => array(
                     'title' => array('text' => 'Marks Obtain')
                  ),
                  'series' => $chartData2
               )
            ));
        }

这里我试图从我的markdetails表中显示图表我已经在数据和主题名称中删除了标记并将名称和数据数组传递给图表小部件的系列现在问题是如果我给静态显示图表的值如果我从数据库图中得到的值没有绘制。

这里我打印并检查chartData1和chartData2都有相同的值,但当我将此值传递给我的小部件时,chartData1绘制了图表,其中mapData2“data”数组未通过,因此图表未绘制

Array
(
    [0] => Array
        (
            [name] => English
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [1] => Array
        (
            [name] => Language1
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [2] => Array
        (
            [name] => Science
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [3] => Array
        (
            [name] => Social Science
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [4] => Array
        (
            [name] => Mathematics
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

)
Array
(
    [0] => Array
        (
            [name] => English
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [1] => Array
        (
            [name] => Language1
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [2] => Array
        (
            [name] => Science
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [3] => Array
        (
            [name] => Social Science
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

    [4] => Array
        (
            [name] => Mathematics
            [data] => Array
                (
                    [0] => 90
                    [1] => 80
                    [2] => 80
                )

        )

)

1 个答案:

答案 0 :(得分:0)

在控制器更改foreach中

foreach($model as $val)
   {
        for($i=0;$i<count($sub_label);$i++)
        {
             $mrk[$i][]=intval($val[$sub_label[$i]]);
         }
   }

这是有效的,终于得到....................