PHP数组到JSON具有带有回调函数的参数

时间:2019-04-26 18:19:35

标签: javascript php json pannellum

在我的PHP脚本中,我有一个类似于以下的数组:

$panorama = array(
    "default" => array(
        "firstScene" => 2,
        "author" => 'Felipe'
    ), 
    "scenes" => array(
        "circle" => array(
            "title" => "Title 1", 
            "hotSpots" => array(
                "pitch" => "-2.1",
                "createTooltipFunc" => "hotspot"
            )
        )
    )
);

此数组将作为json对象传递给Javascript函数,如下所示:

pannellum.viewer('panorama', <?php echo json_encode($panorama); ?>);

参数createTooltipFunc必须接收名为hotspot的回调函数。因此,在最终的json中,当我将此PHP数组传递给Javascript函数时,此参数应如下所示:“ createTooltipFunc”:hotspot ,不带双引号。我该怎么办?

仅提供更多信息,我试图使用插件 pannellum.js 创建一个导览,并且从mysql数据库中获取所需的所有json信息。

>

2 个答案:

答案 0 :(得分:2)

pannellum 使用之前,请保留一个Javascript变量,以保留对象并更新属性(假设hotspot是变量)。

//  create Javascript object
var obj = <?php echo json_encode($panorama); ?>;

// update createTooltipFunc proeprty with the variable
// where variable name can be extract from $panorama
obj.scenes.circle.hotSpots.createTooltipFunc = <?php echo $panorama['scenes']['circle']['hotSpots']['createTooltipFunc']; ?>;

pannellum.viewer('panorama', obj);

答案 1 :(得分:0)

按照Pranav的建议,我不得不将PHP数组放入javascript对象中并循环遍历以找到正确的节点,然后将旧值替换为新值,如下所示:

var objTour = <?php echo json_encode($panorama); ?>;
            for (var [key, value] of Object.entries(objTour.scenes)) {
                var objdadosScene = value;
                for (var [key, value] of Object.entries(objdadosScene)) {
                    if(key == 'hotSpots'){
                        var objHotspot = objdadosScene.hotSpots;
                        for (var [key, value] of Object.entries(objHotspot)) {
                            var objDadosHotspot = value;
                            for (var [key, value] of Object.entries(objDadosHotspot)) {                             
                                objDadosHotspot['createTooltipFunc'] = hotspot;
                            }
                        }
                    }
                }
            }

我不知道这是否是获得结果的最佳方法,但它正在起作用。谢谢!