如何将对象数组添加到chartjs?

Posted

技术标签:

【中文标题】如何将对象数组添加到chartjs?【英文标题】:How to add an array of objects to chartjs? 【发布时间】:2019-04-24 16:11:16 【问题描述】:

如何将对象数组添加到 chartjs。该视图的控制器通过变量 cg 向模板树枝发送数组。我这样做的方式是我得到一个错误,我正在经历的是一个数组数组。在标签属性中,我想放置月份的排列,并在属性数据中放置 imp 的修复。请问对此有什么想法吗?控制器:

/** Controller
 * @Route("/cg1", name="cg1")
 */
public function cg1Action()

    $conn=$this->get('database_connection');
    $consulta="SELECT consumo_combustible.importe as imp,MONTH(consumo_combustible.fecha) as mes FROM consumo_combustible WHERE YEAR(consumo_combustible.fecha)=2018";
    $sql=$conn->fetchAll($consulta);      
    return $this->render('default/consultag1.html.twig', array('cg' => $sql));

//------------- //- 面积图 - //---------------

         // Get context with jQuery - using jQuery's .get() method.
         var areaChartCanvas = $('#areaChart').get(0).getContext('2d')
         // This will get the first returned node in the jQuery collection.
         var areaChart       = new Chart(areaChartCanvas)
         var datames = []
         datames= cg.mes  ;
         var dataimp = [] ;

         dataimp= cg.imp  ;
         var areaChartData = 
             labels  : datames,
             datasets: [
                 
                     label               : 'Electronics',
                     fillColor           : 'rgba(210, 214, 222, 1)',
                     strokeColor         : 'rgba(210, 214, 222, 1)',
                     pointColor          : 'rgba(210, 214, 222, 1)',
                     pointStrokeColor    : '#c1c7d1',
                     pointHighlightFill  : '#fff',
                     pointHighlightStroke: 'rgba(220,220,220,1)',
                     data                :  dataimp
                 ,
                 
                     label               : 'Digital Goods',
                     fillColor           : 'rgba(60,141,188,0.9)',
                     strokeColor         : 'rgba(60,141,188,0.8)',
                     pointColor          : '#3b8bba',
                     pointStrokeColor    : 'rgba(60,141,188,1)',
                     pointHighlightFill  : '#fff',
                     pointHighlightStroke: 'rgba(60,141,188,1)',
                     data                :  dataimp
                 
             ]
         

抛出以下错误:

在第 55 行的 default\consultag1.html.twig 中不存在键为“0、1、2、3、4、5”的数组的键“mes”

【问题讨论】:

【参考方案1】:

这是解决方案,通过原始函数 result | raw,我得到了控制器发送给视图的值并准备好了

  var valormes=[];
  var valorimp=[];  

  //arr= ["imp":"3000","mes":"2","imp":"830","mes":"3","imp":"1900","mes":"4"];

  var arr= JSON.parse(' resultado|raw ');

  for(var i=0; i< arr.length; i++)
       valormes[i]=arr[i].mes;
       valorimp[i]=arr[i].imp;
  

  console.log(valormes);

  console.log(valorimp);



  var areaChartData = 

  labels  :  valormes,
  datasets: [
    
      label               : '2018',
      fillColor           : 'rgba(210, 214, 222, 1)',
      strokeColor         : 'rgba(210, 214, 222, 1)',
      pointColor          : 'rgba(210, 214, 222, 1)',
      pointStrokeColor    : '#c1c7d1',
      pointHighlightFill  : '#fff',
      pointHighlightStroke: 'rgba(220,220,220,1)',
      data                : valorimp
    

  ]


 /**
 * @Route("/cg1", name="cg1")
 * @Method("GET", "POST")
 */
public function cg1Action(Request $request)

    $conn=$this->get('database_connection');
    $consulta="SELECT SUM(consumo_combustible.importe) as imp, MONTH(consumo_combustible.fecha) as mes FROM consumo_combustible WHERE YEAR(consumo_combustible.fecha)=2018 GROUP BY consumo_combustible.fecha";
    $sql=$conn->fetchAll($consulta);
    $jsonResponse = json_encode($sql);

    echo($jsonResponse);
    return $this->render('default/consultag1.html.twig',array(
        'respuesta' => $jsonResponse

    ));

【讨论】:

以上是关于如何将对象数组添加到chartjs?的主要内容,如果未能解决你的问题,请参考以下文章

将对象属性的所有值提取到 Typescript 中的新数组 [重复]

如何将对象添加到数组中?

如何将对象添加到数组的顶部位置?

如何将带有对象的数组中的数据动态添加到嵌套数组中?

在 PHP 中,如何将对象元素添加到数组中?

如何将更多对象添加到继续编号但不重新开始的对象数组中?