如何使用array_merge在PHP/Higharts中显示未引用的命令


How to use array_merge to display non-quoted commands in PHP/Highcharts?

我正在向客户端传递一个带有多个Highcharts参数的JSON数组。在少数情况下,我使用array_merge在分配代码后面插入一些额外的东西。只要传递的参数将显示在引号中,例如:,这就可以正常工作

$data_['xAxis'] = array_merge($data_['xAxis'], array("type" => "category"));

然后,在客户端,这将转化为:

type: "category"

但在某些情况下,我想传递一个函数,它应该像下面这样显示:

chart: {
    events: {
        load: function () {
            var label = ....
        }
    }
},    

当我在这里使用它时,它显示为文本:

$data_['chart'] = array_merge($data_['chart'], array("events" => "{load: function(event) {var label = ... }}");
chart: {
    events: "{
        load: function () {
            var label = ....
        }
    }"
},    

EDIT:客户端的Javascript如下所示:

$(document).ready(function() {
    var options = {};               
    var url =  "http://geodev.grid.unep.ch/mod_test/jsonp_response.php?callback=?";
    $.getJSON(url, {selectedCountries: selectedCountries , selectedID: selectedID, selectedYears: selectedYears, per_capita: per_capita, graphBorder: graphBorder, graphSource: graphSource, graphStyle: graphStyle, graphXAxis: graphXAxis, type: "jsonp"})
    .done(function(data)
    {
        //console.log(data);
        options.chart       = data["chart"];
        options.tooltip     = data["tooltip"];
        options.series      = data["series"];
        options.title       = data["title"];
        options.subtitle    = data["subtitle"];
        options.yAxis       = data["yAxis"];
        options.xAxis       = data["xAxis"];
        options.legend      = data["legend"];
        options.exporting   = data["exporting"];
        options.plotOptions = data["plotOptions"];
        options.credits     = data["credits"];
        var chart = new Highcharts.Chart(options);
    })

那么,我能做些什么来传递它,使它不显示为文本呢?有人能给我一个提示吗?非常感谢!

的几种方法

  1. 在javascript本身中实现事件处理程序,如

    options.credits     = data["credits"];
    options.chart.events = {};
    options.chart.events.load = function(event){
        // implementations go here
    }
    
  2. 但不推荐,使用eval

    options.credits     = data["credits"];
    options.chart.events = eval(data.chart.events);
    

希望这能帮助